更新 1:允许在服务器端进行跨域访问。
更新 2:尝试使用禁用安全性的 chrome 上传。
target
如果设置为同一域下的 URL,我成功使用了 ngFlow 。问题是有防火墙设置,上传随机失败,由于防火墙匹配特定模式的图像会阻止上传,并且图像不会发送到服务器。奇怪的是没有错误报告给客户端。上传刚刚停止。
根据网络管理员的说法,我们需要将上传提交到另一个域的不同 URL 以绕过防火墙。当我将target
另一个域的绝对 URL 设置为绝对 URL 时,在执行上传过程时我在 Chrome 中收到此错误:
XMLHttpRequest 无法加载https://blabla/PhotoUploadCmd?imageOperation=u …tjpg&flowFilename=Desert.jpg&flowRelativePath=Desert.jpg&flowTotalChunks=1。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问源“ http://10.100.22.111:8282 ”。
这是配置 ng-flow 的代码部分:
app.config(['flowFactoryProvider', function (flowFactoryProvider) {
flowFactoryProvider.defaults = {
target : "/blabla/PhotoUploadCmd?imageOperation=upload",
//permanentErrors: [404, 500, 501],
permanentErrors : [ 500, 501 ],
maxChunkRetries: 1,
chunkRetryInterval: 5000,
simultaneousUploads: 4,
singleFile: true,
progressCallbacksInterval : 1,
withCredentials : true,
method : "octet",
forceChunkSize : true,
testChunks: false
};
flowFactoryProvider.on('catchAll', function (event) {
//console.log('catchAll', arguments);
});
}]);
请注意,防火墙问题仅发生在 UAT 机器上。如果我在本地 Tomcat 服务器上测试上传,它工作正常。
我还尝试了以下方法:
- 在 JSP 上添加了以下代码行(它是加载内部框架的一部分),但仍然是相同的错误
No 'Access-Control-Allow-Origin' header is present on the requested resource
:
编码:
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
- 尝试在禁用安全性的情况下打开 chrome:
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir="C:\path-to-data-folder\Chrome"
使用上述方法,上传到不同的域,但 Chrome 显示警告You are using unsupported command-line flag...
。不用说,这种方法不适合生产使用。
如果您知道如何解决防火墙问题,或者允许 ng-flow 执行上传并允许跨域访问,请告诉我。
塔雷克