我需要一些javascript大师。我有这段代码:
handleImage(new File([blob], blob.name, {type: blob.type})).done(/* something */)
和
handleImage = function (image) {
// create some fake form data
var formData = new FormData();
formData.append("attachment", image);
formData.append("auto", true);
formData.append("_csrf", "xxxxxxxxx");
// post to the server.
return $.ajax({
url: "/some/url",
data: formData,
cache: false,
contentType: false,
processData: false,
type: 'POST',
error: function () {
console.log("error");
}
});
这适用于Chrome和Firefox,但在使用Safari(10.1.1)时,服务器(java / spring mvc)会在MultipartHttpServletRequest
中收到“附件”的空文件。因此在我看来,new File([blob], blob.name, {type: blob.type})
在某种程度上是失败的。
知道这里有什么问题?
答案 0 :(得分:6)
这可能是safari年轻实施中的一个错误。
但为什么你甚至将它转换为File对象?
File对象是Blob,唯一的区别是它具有name
和lastModified
属性。但是,由于您似乎已经扩展了blob
,因此它只会留下您可以添加的lastModified
属性。
我能想到的唯一API,如果您的对象是Blob或文件, FormData.append
方法会产生影响;如果您传递File对象,它将能够自动设置文件名。但是这个方法有第三个参数,允许你设置这个文件名。
因此,如果您将代码更改为包含formData.append("attachment", image, image.name);
并直接使用handleImage(blob)
调用它,它将执行与您正在执行的请求完全相同的请求,但它将在Safari和每个其他不支持File构造函数的浏览器(看着你的IE)。