我使用以下代码上传文档。我在这种情况下使用ajax。
在以下代码中,我将Request.Files.Count
设为0.因此文件无法上传。
前端代码:
<input type="file" name="name" id="pd-fileName" />
....
<button class="btn pr-btn" id="pd-addBtn" type="button" onclick="insertDocument()">Add</button>
function insertDocument() {
......
jq.post('/Main/addDocument?Id=' + Id , function (data) {
alert('Data saved successfully.!');
......
});
});
}
控制器中的代码:
[HttpPost]
public JsonResult addDocument(int Id)
{
string pathPhysical = Server.MapPath("~/Documents/" + Id + "/");
if (!Directory.Exists(pathPhysical))
{
DirectoryInfo di = Directory.CreateDirectory(pathPhysical);
}
if (Request.Files.Count > 0)
{
var file = Request.Files[0];
if (file != null && file.ContentLength > 0)
{
var documentName = Path.GetFileName(file.FileName);
pathPhysical = Path.Combine(pathPhysical, documentName);
file.SaveAs(pathPhysical);
}
}
return Json(JsonRequestBehavior.AllowGet);
}
我该如何解决这个问题?
答案 0 :(得分:1)
试试这个:
<input id="pd-fileName" type="file" name="myfiles[]" multiple="multiple" />
var myfiles = document.getElementById("pd-fileName");
var files = myfiles.files;
var data = new FormData();
for (i = 0; i < files.length; i++) {
data.append('file' + i, files[i]);
}
$.ajax({
beforeSend:function(){...},
type:'post',
url:'you url here',
data:data,
processData:false, // Tell jquery not to process data into any format
success:function(){...},
complete:function(){...}
});
答案 1 :(得分:0)
对于MVC,您需要控制器中的HttpPostedFileBase
对象来捕获文件,以下示例可能对您有帮助,
<form action="" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<input type="submit" />
</form>
注意:对于UPload:enctype="multipart/form-data"
是先决条件。
在控制器
[HttpPost]
public ActionResult Index(HttpPostedFileBase file) {
if (file.ContentLength > 0) {
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
file.SaveAs(path);
}
return RedirectToAction("Index");
}
请注意,action方法的参数是HttpPostedFileBase
的实例。