从 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,唯一的区别是它具有 namelastModified 属性。但是由于您似乎已经扩展了 blob,它只剩下这个 lastModified属性 无论如何您也可以添加它。

我能想到的唯一 API,如果您的对象是 Blob 或 File FormData.append 方法,它会有所不同;如果你传递一个 File 对象,它将能够自动设置文件名。但是这个方法有第三个参数,允许你设置这个文件名。

因此,如果您将代码更改为包含 formData.append("attachment", image, image.name); 并直接使用 handleImage(blob) 调用它,它将执行与您正在执行的请求完全相同的请求,除了它将在Safari 和所有其他不支持 File 构造函数的浏览器(看看你的 IE)。