この質問に関連しているとBlob
継承File
オブジェクトを含むfiles
特性を有する<input type="file">
要素考えるHow to updoad in old browsers (ex Safari 5.1.4)FileReaderを使用せずにBlobオブジェクトとFileオブジェクトからArrayBufferとデータURIを作成するにはどうすればよいですか?
触発され、それが可能ArrayBuffer
を作成しBlob
又はFile
からdata URI
にArrayBuffer
を変換することですオブジェクトを使用せずにFileReader
?
アプローチはこれまで
が
File
オブジェクトにMessageEvent
event.data
付きセットを作成し、"arraybuffer"
に.binaryType
セットとモックWebSocket
を作成してきた試みました。結果は、ArrayBuffer
からFile
、Uint8Array
のonmessage
ハンドラセットのプロトタイプで
File
オブジェクトです。結果はUncaught TypeError: Method get TypedArray.prototype.byteLength called on incompatible receiver [object Object]()
は
FormData
オブジェクト、にリクエストボディを投稿しようとすると、確かによく考えないでFile
を設定し、Uncaught TypeError: Method ArrayBuffer.prototype.byteLength called on incompatible receiver #<ArrayBuffer>()
です。 plnkr
期待される結果の結果Bad Request
は:data URL
に、その後TypedArray
にBlob
とFile
オブジェクトを変換する、または直接にdata URL
<!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>
<script>
var input = document.querySelector("input[type=file]");
input.addEventListener("change", handleFiles, true);
// see http://jsfiddle.net/adamboduch/JVfkt/
var sock = new WebSocket("ws://mock");
sock.binaryType = "arraybuffer";
sock.onerror = function(e) {
console.log("sock error", e); // ignore, here
}
sock.onmessage = function(e) {
console.log("socket message", e.data, e.data instanceof ArrayBuffer);
};
function handleFiles(evnet) {
var file = event.target.files[0];
sock.dispatchEvent(new MessageEvent("message", {
data: file
}));
var data = new FormData();
data.append("file", file);
document.forms[0].action = data;
}
</script>
</body>
</html>
も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それはURL.createObjectURL(
をサポートしている場合、FileReader
.readAsDataURL()
method
私はサファリ5を手元には持っていません(btwこのブラウザは長年使用されていませんが、ユーザーは最新のASAPに変更する必要があります)、 'Blob'オブジェクトをサポートするブラウザ)しかし 'FileReader'をサポートしていません。本当に存在しますか?あなたは間違った方向を見ていませんか? (1つの回避策は、ファイルをどこかにアップロードしてからXHRで再読み込みしますが、最初にこれらの最初の質問に答えてください) – Kaiido
@Kaiido _ "またはBlobオブジェクト(またはFile)をサポートしていてもFileReaderをサポートしていないブラウザではありません。それは本当に存在していますか?」ここではサファリにアクセスできない。 MDNブラウザの互換性によると、 'はサファリのバージョン1.0でサポートされ、Blobは5.1で、FileReaderは6でサポートされています。0; 'responseType'' 'blob ''と '' arraybuffer''を 'XMLHttpRequest'状態' 'Yes''に置き換えます。 rawデータが実際に格納され、 'Blob'オブジェクト内でどのようにアクセスされるのか不思議ですか? – guest271314
おそらく初期の実装...おそらくURL.createObjectURLをサポートしていないのですが、それ以外の場合は という単純なものを試してみることもできます。var url = URL.createObjectURL(blob); var xhr = new XMLHttpRequest(); xhr.onload = function(){ rawData = this.response; (get、url) xhr.send(); '。 IEは初期の実装について話していますが、IE9はTypedArrayをサポートしていませんが、キャンバスの 'imageData'オブジェクトを通して1種類も持っています。 – Kaiido