File
JavaScript中有一个对象。我想实例化一个用于测试目的。
我已经尝试过new File()
,但是出现“非法构造函数”错误。
是否可以创建File
对象?
文件对象参考:https : //developer.mozilla.org/en/DOM/File
根据W3C File API规范,File构造函数需要2(或3)个参数。
因此,要创建一个空文件,请执行以下操作:
var f = new File([""], "filename");
- 第一个参数是作为文本行数组提供的数据;
- 第二个参数是文件名;
-
第三个参数如下所示:
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用于测试目的,则已经废弃了如何使用它。
否则,将以下内容应用于前往Blob的迁移策略,例如该问题的答案。
改用Blob
作为替代方案,您可以使用Blob代替File,因为它是根据W3C规范从File接口派生的:
interface File : Blob {
readonly attribute DOMString name;
readonly attribute Date lastModifiedDate;
};
File接口基于Blob,继承了Blob功能并将其扩展为支持用户系统上的文件。
创建斑点
在现有的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上,但由于无法长期暴露上传逻辑,因此无法成功上传。
现在所有主要浏览器都可以支持它:https : //developer.mozilla.org/zh-CN/docs/Web/API/File/File
var file = new File(["foo"], "foo.txt", {
type: "text/plain",
});
这个想法...要在javaScript中为DOM中已经存在的图像创建File对象(api):
<img src="../img/Products/fijRKjhudDjiokDhg1524164151.jpg">
var file = new File(['fijRKjhudDjiokDhg1524164151'],
'../img/Products/fijRKjhudDjiokDhg1524164151.jpg',
{type:'image/jpg'});
// created object file
console.log(file);
不要那样做!...(但我还是这么做了)
->控制台给出类似于对象文件的结果:
File(0) {name: "fijRKjokDhgfsKtG1527053050.jpg", lastModified: 1527053530715, lastModifiedDate: Wed May 23 2018 07:32:10 GMT+0200 (Paris, Madrid (heure d’été)), webkitRelativePath: "", size: 0, …}
lastModified:1527053530715
lastModifiedDate:Wed May 23 2018 07:32:10 GMT+0200 (Paris, Madrid (heure d’été)) {}
name:"fijRKjokDhgfsKtG1527053050.jpg"
size:0
type:"image/jpg"
webkitRelativePath:""__proto__:File
但是物体的大小是错误的...
为什么我需要这样做?
例如,在产品更新期间重新传输已经上传的图像表格,以及更新期间添加的其他图像
因为这是JavaScript且是动态的,所以您可以定义自己的与File接口匹配的类,而改用它。
我只需要使用dropzone.js进行此操作,因为我想模拟文件上传并且它可以在File对象上运行。
文章标签:file-upload , javascript , upload
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!