jQuery Ajax を使用して単一のファイル (画像ではない) を WCF Web サービス (svc) にアップロードしようとしています。私はついに web.config をトランスポート用に正しく取得し、私の SVC は何かを受信していますが、受信フォームのコンテンツを取得して処理する方法について途方に暮れています...
<input id="ipt_file" type="file" />
<a href='#' onclick="UploadFile();" data-role='button'>Upload</a>
var UploadFile = function () {
var file_object = $('#ipt_file')[0].files[0];
var form_data = new FormData();
form_data.append('file', file_object);
var xhr_upload = $.ajax({
type: "POST",
headers: { "Cache-Control":"no-cache", "X-Session":"12345678" },
url: "../Upload.svc/UploadJobFile",
data: form_data,
processData: false,
contentType: false,
dataType: "json",
success: function (msg) {
if (typeof (msg) === "object") {
var _upload = $.parseJSON(msg.d);
alert(_upload.status + ': ' + _upload.msg);
};
}
});
};
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Upload
{
[OperationContract(Name="UploadJobFile")]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedResponse, ResponseFormat = WebMessageFormat.Json)]
[return: MessageParameter(Name = "d")]
public string UploadJobFile()
{
string response = string.Empty;
HttpRequest request = HttpContext.Current.Request;
string session_id = request.Headers["X-Session"];
//
// ??? need the request file or body
//
if (request.ContentLength > 0)
{
response = "OK, content length= " + request.ContentLength.ToString(); // works, returns ~ file size
}
else
{
response = "fail";
}
return response;
}
}
残念ながら、request.Form["file"]、request.Form[0]、および request.Params は、そうでないと主張する多くの投稿を読んだにもかかわらず、機能していないようです。リクエストの本文にアクセスできない場合、バイト配列を作成したり、ストリームを作成したり、HttpPostedFile として宣言したりすることはできません... (実際に行うことは、それを渡す新しいリクエストと、データ サービス)。
私は何が欠けていますか?