从blob创建文件

3 javascript safari form-data fileapi

我需要一些javascript大师.我有这个代码:

handleImage(new File([blob], blob.name, {type: blob.type})).done(/* something */)
Run Code Online (Sandbox Code Playgroud)

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");
            }
        });
Run Code Online (Sandbox Code Playgroud)

这适用于Chrome和Firefox,但在使用Safari(10.1.1)时,服务器(java/spring mvc)会在MultipartHttpServletRequest空文件中收到"附件".所以在我看来,new File([blob], blob.name, {type: blob.type})某种程度上是失败的.

知道这里有什么问题吗?

Kai*_*ido 6

这可能是safari年轻实施中的一个错误.

但为什么你甚至将它转换为File对象?

File对象是一个Blob,唯一的区别是它有一个name和一个lastModified属性.但是因为你似乎已经扩展了blob它,所以只留下lastModified你可以添加的属性.

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

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