私は何か進歩を見せずにこれを数時間試してきました。問題は次のとおりです。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);
}
を、そしてあなたには、いくつかのAJAXのオプションが不足している - [これを参照してください。答え](http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc/29293681#29293681) –
@StephenMuecke私はFormDataのアプローチを試みたが、それは私のためにはうまくいかなかった:var formData = new FormData(); formData.append(e.target.files [0]);.とにかくそれがなぜ必要なのか説明できますか?要求はクライアント側からうまくいくように見えますが、サーバ側だけがヌルオブジェクトを取得します。 – Riz
'FormData'を使わない限り、ajaxを使ってファイルを送ることはできません。詳細[info here](https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects) –