8

私はJQueryを初めて使用し、JQueryAjaxを使用していくつかのファイルをサーバーにアップロードしたいと考えています。PUTメソッドのみです。バイナリファイル(gifやjpegなど)をサーバーに送信すると、アップロードは成功しますが、バイナリデータの内容が変更されました(常に元のファイルサイズよりも大きくなります)。コンテンツタイプまたはファイルタイプの結果を変更しようとしましたが、それでも機能しません。誰もがこれを修正する方法を知っていますか?

PS:サーバーのコードに触れることができないため、バイナリファイルのコンテンツを他の形式にエンコードできません。

var reader = new FileReader();

reader.onloadend = (function(Thefile) {

    $.ajax({
        url: url,
        processData:false,
        //contentType:"application/octet-stream; charset=UTF-8",
        data: file.result,
        type: 'PUT',
        success : function(){console.log("OK!");},
        error : function(){console.log("Not OK!");}
    }); 
})(file);

reader.readAsBinaryString(file);
4

1 に答える 1

5

ほとんどの(すべて?)ブラウザは、を介して送信するときに、文字列データ型をUTF-8に自動的に変換しますXMLHttpRequest。ファイルをバイナリ文字列として読み取ると、次のように正確に示されます。各文字が0〜255の値であるJavaScript文字列オブジェクト。

AJAXリクエストにバイナリエンコードされたデータを送信させるには、データパラメータは、、、またはオブジェクトArrayBufferである必要があります。FileBlob

送信する前にファイルの内容にアクセスする必要がある場合はArrayBuffer、次のコードを使用してバイナリ文字列をに変換できます。

var arrBuff = new ArrayBuffer(file.result.length);
var writer = new Uint8Array(arrBuff);
for (var i = 0, len = file.result.length; i < len; i++) {
    writer[i] = file.result.charCodeAt(i);
}

そして、arrBuffインスタンスをAJAX関数に渡します。それ以外の場合は、すべてのコードFileなしでオブジェクト自体をAJAX関数に渡すことができるはずです。FileReader

于 2012-10-25T16:59:58.590 に答える