Safari和IE的File()构造函数是否有替代方案?

时间:2015-11-20 07:57:12

标签: angularjs file internet-explorer safari filereader

我正在使用File()构造函数来创建用于将blob文件上载到服务器的文件对象。以下代码适用于Chrome,但Safari和Internet Explorer无效。

image_url = new File([blob],file_name,{type: mimeString});

代码在此行中断开并在控制台中出现此错误" FileConstructor不是构造函数" (评估'新文件([blob],file_name,{type:mimeString})')

使用FileReader API是替代方案,但我无法解决此问题。

4 个答案:

答案 0 :(得分:12)

我建议使用blob api,我发现了同样的问题,我解决了这个问题:

reader.readline()

它不是“文件”,但您可以像使用它一样使用它。

答案 1 :(得分:2)

根据网络"我可以使用" Safari不支持new File()构造函数。请参阅此链接http://caniuse.com/#feat=fileapi

所以我认为您必须使用FileReader或使用此处列出的某些polyfill https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills

特别是这个对你有用https://github.com/mailru/FileAPI(我自己没有使用它)

另请参阅此SO回答What to use instead of FileReader for Safari?

答案 2 :(得分:0)

如果可以使用ES6类:

class CustomFile extends Blob
{
    constructor(blobParts, filename, options) {
        super(blobParts, options);
        this.name = filename || "";
        if(options) {
          this.lastModified = options.lastModified;
        }
    }

    lastModified = 0;
    name = "";
}
const blob = new Blob();
const fileObject = new CustomFile([blob],"myfile");

console.log(fileObject);

答案 3 :(得分:0)

有一个文件ponyfill on npm,可用于现代模块导入。这使用法变得简单,但是您确实需要将其导入使用new File()的每个模块中。

import File from '@tanker/file-ponyfill';

const myFile = new File(['somefiledata'], 'example.txt', { type: 'text/plain'});