从 blob 创建文件
Creating a file from a blob
我需要一些 java脚本大师。我有这个代码:
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
"attachment" 的空文件。所以在我看来 new File([blob], blob.name, {type: blob.type})
不知何故失败了。
知道这里出了什么问题吗?
这可能是 Safari 的年轻实现中的一个错误。
但为什么还要将其转换为文件对象?
File 对象是一个 Blob,唯一的区别是它具有 name
和 lastModified
属性。但是由于您似乎已经扩展了 blob
,它只剩下这个 lastModified
属性 无论如何您也可以添加它。
我能想到的唯一 API,如果您的对象是 Blob 或 File 是 FormData.append
方法,它会有所不同;如果你传递一个 File 对象,它将能够自动设置文件名。但是这个方法有第三个参数,允许你设置这个文件名。
因此,如果您将代码更改为包含 formData.append("attachment", image, image.name);
并直接使用 handleImage(blob)
调用它,它将执行与您正在执行的请求完全相同的请求,除了它将在Safari 和所有其他不支持 File 构造函数的浏览器(看看你的 IE)。
我需要一些 java脚本大师。我有这个代码:
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
"attachment" 的空文件。所以在我看来 new File([blob], blob.name, {type: blob.type})
不知何故失败了。
知道这里出了什么问题吗?
这可能是 Safari 的年轻实现中的一个错误。
但为什么还要将其转换为文件对象?
File 对象是一个 Blob,唯一的区别是它具有 name
和 lastModified
属性。但是由于您似乎已经扩展了 blob
,它只剩下这个 lastModified
属性 无论如何您也可以添加它。
我能想到的唯一 API,如果您的对象是 Blob 或 File 是 FormData.append
方法,它会有所不同;如果你传递一个 File 对象,它将能够自动设置文件名。但是这个方法有第三个参数,允许你设置这个文件名。
因此,如果您将代码更改为包含 formData.append("attachment", image, image.name);
并直接使用 handleImage(blob)
调用它,它将执行与您正在执行的请求完全相同的请求,除了它将在Safari 和所有其他不支持 File 构造函数的浏览器(看看你的 IE)。