如何在JavaScript中实例化一个File对象?

JavaScript中有一个File对象。 我想实例化一个用于testing目的。

我已经尝试new File() ,但我得到一个“非法的构造函数”错误。

有没有可能创build一个File对象?


文件对象参考: https : //developer.mozilla.org/en/DOM/File

根据W3C File API规范,File构造函数需要2(或3)个参数。

所以创build一个空文件做:

 var f = new File([""], "filename"); 
  • 第一个参数是以文本行数组的forms提供的数据;
  • 第二个参数是文件名;
  • 第三个参数是这样的:

     var f = new File([""], "filename.txt", {type: "text/plain", lastModified: date}) 

它适用于FireFox,Chrome和Opera,但不适用于Safari或IE / Edge。

现在你可以!

 var parts = [ new Blob(['you construct a file...'], {type: 'text/plain'}), ' Same way as you do with blob', new Uint16Array([33]) ]; // Construct a file var file = new File(parts, 'sample.txt', { lastModified: new Date(0), // optional - default = now type: "overide/mimetype" // optional - default = '' }); var fr = new FileReader(); fr.onload = function(evt){ document.body.innerHTML = evt.target.result + "<br><a href="+URL.createObjectURL(file)+" download=" + file.name + ">Download " + file.name + "</a><br>type: "+file.type+"<br>last modified: "+ file.lastModifiedDate } fr.readAsText(file); 

更新

BlobBuilder已经过时了,看你如何使用它,如果你正在使用它来进行testing。

否则,将下面的内容应用到Blob的迁移策略中,比如这个问题的答案。

改用Blob

作为替代,您可以使用代替File的Blob ,因为它是按照W3C规范从File接口派生的:

 interface File : Blob { readonly attribute DOMString name; readonly attribute Date lastModifiedDate; }; 

File接口基于Blob,inheritanceblobfunction并将其扩展为支持用户系统上的文件。

创buildBlob

在一个现有的JavaScript方法中使用BlobBuilder ,这个方法需要通过XMLHttpRequest上传一个文件,并提供一个Blob来正常工作,如下所示:

 var BlobBuilder = window.MozBlobBuilder || window.WebKitBlobBuilder; var bb = new BlobBuilder(); var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://jsfiddle.net/img/logo.png', true); xhr.responseType = 'arraybuffer'; bb.append(this.response); // Note: not xhr.responseText //at this point you have the equivalent of: new File() var blob = bb.getBlob('image/png'); /* more setup code */ xhr.send(blob); 

扩展示例

剩下的样例以更完整的方式放在jsFiddle上 ,但是不能成功上传,因为我无法长期公开上传逻辑。

你不能实例化它。

你通常从file upload表单中获取它们。 这篇文章解释得很好。

因为这是JavaScript和dynamic的,你可以定义自己的类,匹配文件接口,并使用它。

我不得不用dropzone.js来做这个,因为我想模拟一个file upload,它可以在File对象上工作。