0

サーバーにポストバックできるように、ファイルクライアント側を取得するAJAXを少し作成しました。対象は。としてフェッチされますArrayBuffer。ただし、保存のためにこのバイナリをサーバーにポストバックするときに、このファイルにいくつかのメタデータを含める必要があります。とオブジェクトを他の文字列でラップしようとしましたArrayBufferが、データサーバー側を調べると、の長さしか転送されていないようArrayBufferです。

私はArrayBufferこの答えを介して文字列に変換しようとしました:

https://stackoverflow.com/a/11058858/449511

ただし、私ArrayBufferのバイト長は519843であるため、例外が発生します。

Uncaught RangeError:ArrayBufferの長さからbyteOffsetを引いた値は、要素サイズの倍数ではありません。

私の理解ArrayBuffersはまばらです。MDNドキュメントを読んだことがありますが、他に多くを見つけることができません。ArrayBufferこれを文字列に変換する方法、またはオブジェクトにラップする方法について、さらにリソースやアイデアを提供してくれたことに感謝してArrayBufferいます。

これが私のAJAXコードのスニペットです:

$.ajax({
  type: 'POST',
  url:  'http://localhost:5000/',
  data: {fname: f, url:u, binary:b},  // the binary is an ArrayBuffer
});
4

1 に答える 1

0

文書化されているので、コメントで@Markusに感謝します。UInt8Array を使用すると機能します。また、必要なものを正確に文書化するために、この質問を見つけました: Getting BLOB data from XHR request

私の質問にリンクされているArrayBuffer to Stringの回答を使用すると、大きなファイルサイズではうまく機能しないため、反復バージョンを作成し、オブジェクトに投稿する前にbase64に変換しました。

var binary_string = ''
bytes = new Uint8Array(ArrayBuffer object from ajax get);
for (var i = 0; i < bytes.byteLength; i++) {
    binary_string += String.fromCharCode(bytes[i]);
}
base64_string = window.btoa(binary_string);
于 2012-11-26T05:58:27.287 に答える