此问题与How to updoad in old browsers (ex Safari 5.1.4)
相关并受其启发如果<input type="file">
元素的files
属性包含从File
继承的Blob
个对象,是否可以创建ArrayBuffer
并转换{ {1}}来自ArrayBuffer
或data URI
对象的Blob
而未使用File
?
创建模拟FileReader
,WebSocket
设置为.binaryType
,创建"arraybuffer"
,MessageEvent
设置为event.data
对象;结果是File
处理程序File
对象
将onmessage
的原型设置为File
,ArrayBuffer
;结果为Uint8Array
,Uncaught TypeError: Method ArrayBuffer.prototype.byteLength called on incompatible receiver #<ArrayBuffer>()
在Uncaught TypeError: Method get TypedArray.prototype.byteLength called on incompatible receiver [object Object]()
对象设置File
,尝试将请求正文发布到FormData
,但事实上并非构思良好;结果<iframe>
位于plnkr
预期结果:将Bad Request
和Blob
个对象转换为File
然后转换为data URL
,或直接转换为TypedArray
data URL
另见Display image from blob using javascript and websockets,How can you encode a string to Base64 in JavaScript?;有趣的是,我现在正在问类似的问题https://stackoverflow.com/questions/34302231/is-there-any-way-to-convert-the-file-to-an-arraybuffer-without-filereader-api; Blob
.slice()
method,FileReader
.readAsDataURL()
method
答案 0 :(得分:1)
我只是把它放在这里:
var input = document.querySelector("input[type=file]");
input.addEventListener("change", handleFiles, true);
// for url
window.URL = window.URL || window.webkitURL;
function handleFiles(evnet) {
var file = event.target.files[0];
document.querySelector('iframe')
.setAttribute('src', window.URL.createObjectURL(file));
}
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form method="get" entype="multipart/form-data" target="binaryFrame">
<input id="#avatar" type="file" name="file" />
<input type="submit" />
</form>
<iframe name="binaryFrame"></iframe>
</body>
</html>