2016-05-02 8 views
0

私は何か進歩を見せずにこれを数時間試してきました。問題は次のとおりです。jquery ajaxを使用してファイルをアップロードしようとしています。クライアント側では、デバッグ時にうまくいくように見えます。ファイルオブジェクト、その名前、サイズなどを見ることができます。jquery ajax - nullの問題を使用してファイルをアップロードしています

サーバ側では、HttpPostedFileBaseリクエストは常にnullです。以下はコードです:

//client side  
    <input type="file" style="visibility:hidden; height:0; width:0;" id="taskFileUpload"/> 

    //triggered by file input change event 
    var uploadFile = function (model, e) { 
    fileUploadRequest('api/uploadFile',e.target.files[0]); 
    } 

    //so far seems good when debugging  
    var fileUploadRequest = function (url, file) { 
      $.ajax({ 
       url: url, 
       type: "POST", 
       data: file, 
       processData: false 
      }); 


//server side - request is always null! 
[AcceptVerbs("Post")] 
[AllowAnonymous] 
public HttpResponseMessage uploadFile(HttpPostedFileBase request) 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, request); 
} 

EDIT:問題を把握しました。以下のようなFormDataのアプローチは、別の理由で私のために働いていませんでした:Error 415 Media Typeはサポートされていません。これは、.NetがHttpPostedFileBaseオブジェクトにバインドする方法を知らないことと関係していました。だから私は、次のようでしたし、動作しているようです:

public HttpResponseMessage uploadFile() 
     { 
      var file = HttpContext.Current.Request.Files.Count > 0 ? 
       HttpContext.Current.Request.Files[0] : null; 
      return Request.CreateResponse(HttpStatusCode.OK); 
     } 
+0

を、そしてあなたには、いくつかのAJAXのオプションが不足している - [これを参照してください。答え](http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc/29293681#29293681) –

+0

@StephenMuecke私はFormDataのアプローチを試みたが、それは私のためにはうまくいかなかった:var formData = new FormData(); formData.append(e.target.files [0]);.とにかくそれがなぜ必要なのか説明できますか?要求はクライアント側からうまくいくように見えますが、サーバ側だけがヌルオブジェクトを取得します。 – Riz

+0

'FormData'を使わない限り、ajaxを使ってファイルを送ることはできません。詳細[info here](https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects) –

答えて

0

ショーあなたは `FormData`を使用する必要があります。この例

function subirArchivo() { 
var data = new FormData(); 
var files = $("#fuArchivo").get(0).files; 
// Si se tiene archivo se va a guardar 
if (files.length > 0) { 
    data.append("Archivo", files[0]); 
} 
var ruta = ''; 
// Make Ajax request with the contentType = false, and procesDate = false 
var ajaxRequest = $.ajax({ 
    type: "POST", 
    url: "../ServicioValidaciones.asmx/subirArchivo", 
    contentType: false, 
    processData: false, 
    data: data, 
    success: function (result) { 
     ruta = result; 
    }, 
}); 
ajaxRequest.done(function (xhr, textStatus) { 
// Make Ajax request with the contentType = false, and procesDate = false 
}); 

}

+0

こんにちは@ araad1992、私はFormDataのアプローチを試みたが、それは私のために働かなかった。あなたのフォームと入力ファイルコントロールの外観を教えてください。 – Riz

関連する問題