考虑以下示例:
function previewFile(file) {
var reader = new FileReader();
reader.onloadend = function () {
console.log(reader.result);
}
reader.readAsDataURL(file);
}
它指出:
instanceOfFileReader.readAsDataURL(BLOB);
blob:要从中读取的Blob或文件。
'file:///C:/path-to/root.png'
传递给readAsDataURL()
FileReader()
是否可以在Firefox Addon中使用?此信息截至目前已过时,但无法删除。
File
instances:
new File("/path/to/file");
File
是Blob
的子类,因此所有File
实例也是有效的Blob
s。请注意,这需要a platform path, and not a file URL。FileReader
可用于插件。所有File
s都有FileReader
和window
。如果要在非窗口范围内使用它们(如bootstrap.js
或代码模块),可以使用nsIDOMFile
/ nsIDOMFileReader
。
要将URL转换为Blob for FileReader.readAsDataURL(),请执行以下操作:
var request = new XMLHttpRequest();
request.open('GET', MY_URL, true);
request.responseType = 'blob';
request.onload = function() {
var reader = new FileReader();
reader.readAsDataURL(request.response);
reader.onload = function(e){
console.log('DataURL:', e.target.result);
};
};
request.send();
试试这个我从@nmaier那里学到了这个,当时我正在转换为ico:我真的不明白什么是数组缓冲区,但它可以满足我们的需求:
function previewFile(file) {
var reader = new FileReader();
reader.onloadend = function () {
console.log(reader.result); //this is an ArrayBuffer
}
reader.readAsArrayBuffer(file);
}
注意我是如何将你的readAsDataURL
改为readAsArrayBuffer
。
这是@nmaier给我的例子:https://stackoverflow.com/a/24253997/1828637
它有一个小提琴
如果你想采取这个并从中创建一个文件,我认为你会在onloadend
中使用file-output-stream
扩展了Felix Turner的回应,以下是我将如何在fetch
API中使用此方法。
async function createFile(){
let response = await fetch('http://127.0.0.1:8080/test.jpg');
let data = await response.blob();
let metadata = {
type: 'image/jpeg'
};
let file = new File([data], "test.jpg", metadata);
// ... do something with the file or return it
}
createFile();