5

我有文件上传,它不使用表单上传文件,而是我想使用 ajax 上传文件。我尝试了以下方法,但无法传递文件。它是空的。请帮忙。下面是我的实现。

HTML 和 jQuery 函数

<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) {

                }
            });
        });

控制器

public ActionResult UploadVideo(HttpPostedFileBase file)
        {
            return Json("", JsonRequestBehavior.AllowGet);
        }
4

2 回答 2

2

有几个选项。如果客户端浏览器支持,HTML5 File API您可以使用它将文件异步上传到服务器。如果您需要支持不支持此 API 的旧版浏览器,您可以使用文件上传组件,例如Uploadify, Fine uploader, jquery form, ... 这些插件的优点是它们将测试浏览器的功能以及它是否支持 File API它将使用它,否则它将回退到较旧的技术,例如隐藏 iframe 或 Flash 电影。

于 2013-04-22T06:54:59.373 回答
1

我使用了一些插件,我发现 Kendo UI 上传插件很好,这是一个链接,它是如何工作的:

http://demos.kendoui.c​​om/web/upload/async.html

您可以在这里找到 Asp.Net MVC 3 的示例项目: http ://www.kendoui.c​​om/forums/ui/upload/upoad-with-mvc.aspx

        [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("");
        }
于 2013-04-22T13:17:27.920 回答