使用 jquery ajax 上传文件 - 空问题
uploading file using jquery ajax - null issue
我已经尝试了几个小时,但没有取得任何进展。问题是:我正在尝试使用 jquery ajax 上传文件。在客户端,当我调试时似乎很好:我可以看到文件对象、它的名称、它的大小等。
在服务器端,HttpPostedFileBase 请求始终为空。下面是代码:
//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);
}
编辑:我想通了这个问题。由于不同的原因,下面建议的 FormData 方法对我不起作用:不支持错误 415 媒体类型。这与 .Net 不知道如何绑定到 HttpPostedFileBase 对象有关。所以我做了以下操作,它似乎有效:
public HttpResponseMessage uploadFile()
{
var file = HttpContext.Current.Request.Files.Count > 0 ?
HttpContext.Current.Request.Files[0] : null;
return Request.CreateResponse(HttpStatusCode.OK);
}
显示这个例子
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
});
}
我已经尝试了几个小时,但没有取得任何进展。问题是:我正在尝试使用 jquery ajax 上传文件。在客户端,当我调试时似乎很好:我可以看到文件对象、它的名称、它的大小等。
在服务器端,HttpPostedFileBase 请求始终为空。下面是代码:
//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);
}
编辑:我想通了这个问题。由于不同的原因,下面建议的 FormData 方法对我不起作用:不支持错误 415 媒体类型。这与 .Net 不知道如何绑定到 HttpPostedFileBase 对象有关。所以我做了以下操作,它似乎有效:
public HttpResponseMessage uploadFile()
{
var file = HttpContext.Current.Request.Files.Count > 0 ?
HttpContext.Current.Request.Files[0] : null;
return Request.CreateResponse(HttpStatusCode.OK);
}
显示这个例子
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
});
}