【发布时间】:2015-08-14 09:12:52
【问题描述】:
我仍然对上传文件的不同方法感到困惑。后端服务器不在我的控制之下,但我可以使用 Swagger 页面或 Postman 上传文件。这意味着服务器运行正常。但是当我使用 AngularJS 进行上传时,它不起作用。
这是使用 Postman 进行测试的方法。我只是用form-data:
请注意,请求标头的 Content-Type 为 multipart/form-data。但是 Request Payload 有 filename 和 Content-Type as image/png。
这是我的代码:
$http({
method: 'POST',
url: ApiUrlFull + 'Job/Item?smartTermId=0&name=aaa1&quantity=1&ApiKey=ABC',
headers: { 'Content-Type': undefined },
transformRequest: function(data) {
var fd = new FormData();
fd.append('file', params.imageData);
return fd;
}
})
params 只是一个在imageData 中有文件url 的对象。
我的代码也发送了类似的 URL 参数(因此我们可以忽略导致问题的原因)。但是请求有效负载是 base64 并且它看起来不同,因为它缺少 filename 字段。
我对后端的控制为零,它是用 .NET 编写的。
所以我想我的问题是:使用 Angular($http 或 $resource),我如何修改请求,以便像 Postman 那样发送正确的请求有效负载?我不知道如何对此进行逆向工程。
我已经尝试过这个https://github.com/danialfarid/ng-file-upload,它实际上在 POST 之前首先做了 OPTIONS 请求(假设 CORS 问题)。但是服务器给了 OPTIONS 405 错误。
【问题讨论】:
-
您需要一个实际的
File(或只是一个Blob)对象来发送以在第一个请求中获得效果,params.imageData是一个字符串。 -
params.imageData只是来自input type=file的file://URL。或者你的意思是我没有想到的其他东西? -
您发布的
params.imageData是一个base64 编码的png,它是一个字符串。要让 FormData 以您希望的方式发布数据,它必须是 File 对象或 Blob 对象。 Ifd.append('file', blob_from_imageData);搜索 SO 以将数据 url 转换为 blob。 -
你是怎么解决的?面临同样的问题。请帮忙!
标签: angularjs file-upload angular-file-upload