2016-04-29 6 views
0

ファイルからAJAX経由でバイト配列を送信しようとしています。それは常にPDFの偽りです。入力ファイルを使用してajaxを通してバイト配列を送信します。

次のようにだから私のJavascriptを+ jQueryのは、次のとおりです。

私のWCFサービスで
function upload() { 
    var file = document.getElementById("inputFile").files[0]; 

    var fr = new FileReader(); 
    fr.onload = function() { 
     var binaryString = this.result; 

     var objUploader = { 
      element: { 
       Name: "example", 
       Document: binaryString 
      } 
     }; 

     $.ajax({ 
      url: "http://localhost/Uploader/ServiceUploader.svc/saveDocument", 
      data: JSON.stringify(objUploader), 
      dataType: "json", 
      type: "POST", 
      contentType: "application/json; charset=uft-8", 
      success: function (data) { 

      }, 
      error: function (xhr, status, error) { 

      } 
     }); 

    }; 

    //reading file 
    fr.readAsArrayBuffer(file); 
} 

私は、このプロパティを持つオブジェクトを取得するために期待してい:

[DataContract] 
    public class UploaderElement 
    { 
     [DataMember] 
     public string Name { get; set; } 
     [DataMember] 
     public byte[] Document { get; set; } 
    } 

をそして、私の関数の定義は次のようになります。

long saveDocument(UploaderElement element); 

問題は私のWCFに私は私の財産「ドキュメント」のバイトの空の配列を取得していますので(JSでFileReaderをした結果である)binaryStringは、常に空であることです。

これはobjUploaderはサービスに送信されたときにどのように見えるかです:私はこの問題を解決するにはどうすればよい

{"element":{"Name":"example","Document":{}}} 

。私のWCFにPDFバイト表現を送る良い方法はありますか?ありがとう、と私の英語には申し訳ありません。

答えて

0

binaryStringは空ではありませんが、JSONへのシリアライズでは{}が生成されます。したがって、単純にファイルデータをオクテットストリームとして送信してください。

$.ajax({ 
    url: "http://localhost/Uploader/ServiceUploader.svc/saveDocument", 
    type: "POST", 
    contentType: "application/octet-stream", 
    data: binaryString, 
    processData: false, 
    success: function (data) { ... } 
    error: function (xhr, status, error) { ... } 
}); 

サーバー上では、バイト配列のみが必要です。

+0

ありがとうございますが、私は '413 Request Entity Too Large'を取得しています。 web.config: ' – Fertos

+0

@Fentosないこれらの構成の専門家、異なるバインディングを試すことはできませんでした。たとえば、 'webHttpBinding' – wero