26

HTMLファイルにアップロードされた添付ファイルをRESTAPIを介してWebページに入力しようとしています。APIドキュメントには、投稿はフォームファイルのアップロードではなく、HTTPリクエストの本文としてのストレートバイナリコンテンツであると記載されています。

私のコードは次のとおりです。

$('#_testButton').bind('click', function () {
    var file = document.getElementById('_testFile').files[0]
    var reader = new FileReader();
    reader.onload = function () {
        $.ajax({
            url: '/attachmentURL',
            type: 'POST',
            data: reader.result
        })
    }
    reader.readAsBinaryString(file)
})

さまざまなmimeTypeで機能するためにこれが必要なので、上記のコードでは宣言しませんでした。ただし、.docファイルに対してcontentType:'application / msword'を宣言し、processData:falseおよびcontentType:falseも試しました。

データは必要な場所に投稿されています。ただし、ファイルを開くと、mimeType:application / x-emptyと空のファイル、または一連のバイナリ文字を含むファイルというメッセージが表示されます。.docファイルとpdfファイルを試しましたが、結果はどちらも同じです。

誰かがこの仕事をするために私が何を変えることができるかについての手がかりを持っていますか?

4

2 に答える 2

36

file参照をデータとして送信するだけで(を使用してprocessData: false)、少なくとも私にとってはうまくいきました:

$('#_testButton').bind('click', function () {
    var file = document.getElementById('_testFile').files[0];

    $.ajax({
        url: "/attachmentURL",
        type: "POST",
        data: file,
        processData: false
    });
});

ここで説明されています: https://developer.mozilla.org/en/DOM/XMLHttpRequest/Sending_and_Recoming_Binary_Data#section_3

文字列の送信 (その文字列がバイナリ データを表している場合でも) は機能しません。これは、ブラウザが強制的に文字列を Unicode に変換し、指定どおりに utf-8 としてエンコードするため、バイナリ データが破損するためです。

データが文字列の場合 エンコーディングは UTF-8 とします。

MIME タイプを「text/plain;charset=UTF-8」にします。

リクエスト エンティティのボディは、Unicode に変換され、UTF-8 としてエンコードされたデータとします。

file参照 ( ) を送信すると、次のblobようになります。

データが Blob の場合 オブジェクトの type 属性が空の文字列でない場合、mime タイプをその値にします。

リクエスト エンティティのボディは、data で表される生データとします。

于 2012-07-09T16:54:09.323 に答える