Asp.net mvc 3 如何通过ajax上传文件
我有文件上传,它不使用表单上传文件,而是我想使用ajax上传文件。我尝试了以下方法,但无法传递文件。它是空的。请帮忙。下面是我的实现 HTML和jQuery函数Asp.net mvc 3 如何通过ajax上传文件,asp.net-mvc-3,jquery,file-upload,upload,Asp.net Mvc 3,Jquery,File Upload,Upload,我有文件上传,它不使用表单上传文件,而是我想使用ajax上传文件。我尝试了以下方法,但无法传递文件。它是空的。请帮忙。下面是我的实现 HTML和jQuery函数 <div id="Upload"> <input type="file" accept="application/x-shockwave-flash" id="virtualtourfile" enctype="multipart/form-data"/> <input type="butt
<div id="Upload">
<input type="file" accept="application/x-shockwave-flash" id="virtualtourfile" enctype="multipart/form-data"/>
<input type="button" value="Upload" id="btnUpload"/>
</div>
$('#btnUpload').click(function () {
$.ajax({
url: "uploadvideo",
type:'POST',
data: $("#virtualtourfile:file"),
success: function (data) {
}
});
});
有两种选择。如果客户端浏览器支持,则可以使用它将文件异步上载到服务器。如果您需要支持不支持此API的传统浏览器,则可以使用文件上载组件,例如。。。这些插件的优点是,它们将测试浏览器的功能,如果它支持文件API,它将使用它,否则它将退回到旧技术,如隐藏iFrame或Flash电影。我使用了一些插件,我发现剑道UI上传插件很不错,下面是它的工作原理链接: 您可以在此处找到Asp.Net MVC 3的示例项目:
[HttpPost]
公共操作结果保存(IEnumerable附件)
{
//上载组件的名称为“附件”
foreach(附件中的var文件)
{
//有些浏览器发送带有完整路径的文件名。这需要删除。
var fileName=Path.GetFileName(file.fileName);
var physicalPath=Path.Combine(Server.MapPath(“~/App\u Data”),文件名);
file.SaveAs(物理路径);
}
//返回一个空字符串表示成功
返回内容(“”);
}
您可以使用jQuery文件上传来实现这一点。演示、下载和文档可访问。在服务器端,您的MVC代码可以像处理常规上载一样处理文件上载。您是否在特定浏览器上面临此问题?@Pankaj Garg no。所有浏览器都是如此。您是否尝试添加contentType:'application/json;charset=utf-8',
和数据:JSON.stringify($(“#virtualtourfile:file”),
?@Pankaj-Garg是的,我做了。它仍然是空的。我认为如果不按照下面的开发者的建议使用插件是不可能的
public ActionResult UploadVideo(HttpPostedFileBase file)
{
return Json("", JsonRequestBehavior.AllowGet);
}
[HttpPost]
public ActionResult Save(IEnumerable<HttpPostedFileBase> attachments)
{
// The Name of the Upload component is "attachments"
foreach (var file in attachments)
{
// Some browsers send file names with full path. This needs to be stripped.
var fileName = Path.GetFileName(file.FileName);
var physicalPath = Path.Combine(Server.MapPath("~/App_Data"), fileName);
file.SaveAs(physicalPath);
}
// Return an empty string to signify success
return Content("");
}