【问题标题】:What to return from a controller action for jQuery File Upload plugin?从 jQuery File Upload 插件的控制器操作返回什么?
【发布时间】:2012-03-02 01:09:51
【问题描述】:

我正在使用 Blueimp 的 jQuery File Upload 5.6 版提供的演示页面。我可以让演示在我的 ASP.NET MVC 项目中工作到可以从页面上传文件的地步。

但是,即使文件成功上传,UI 也会报告错误。我 100% 确定这个错误是因为我没有从我的控制器操作中返回正确的信息。

这是我现有的操作:

    [HttpPost]
    public virtual JsonResult ImageUpload(FormCollection formdata)
    {
        var imagePath = Setting.Load(SettingKey.BlogImagesBasePath).Value;
        for(var i = 0; i < Request.Files.Count; i++)
        {
            var saveFileName = string.Format("{0}\\{1}", imagePath, Request.Files[i].FileName);
            Log.DebugFormat("Attempting to save file: {0}", saveFileName);
            Request.Files[i].SaveAs(saveFileName);
        }

        return Json(new {});
    }

我不知道结果的内容应该是什么。我尝试对 php 示例进行排序,但对 php 完全不熟悉,我能做的最好的就是可能涉及文件名、大小和类型。

是否有人提供指向有效 MVC 示例的链接或提供我需要将正确数据返回到插件的信息?

【问题讨论】:

    标签: asp.net-mvc jquery-plugins file-upload


    【解决方案1】:

    帆船柔道

    我认为这个问题可以 100% 满足您的需求:

    jQuery File Upload plugin asks me to download the file, what is wrong?

    这基本上是它演示的内容:

    班级:

    public class ViewDataUploadFilesResult
    {
        public string Name { get; set; }
        public int Length { get; set; }
        public string Type { get; set; }
    }
    

    动作:

    [HttpPost]
    public JsonResult UploadFiles()
    {
        var r = new List<ViewDataUploadFilesResult>();
        Core.Settings settings = new Core.Settings();
        foreach (string file in Request.Files)
        {
            HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase;
            if (hpf.ContentLength == 0)
                continue;
            string savedFileName = Path.Combine(settings.StorageLocation + "\\Files\\", Path.GetFileName(hpf.FileName));
            hpf.SaveAs(savedFileName);
    
            r.Add(new ViewDataUploadFilesResult()
            {
                Name = hpf.FileName,
                Length = hpf.ContentLength,
                Type = hpf.ContentType
            });
        }
        return Json(r);
    }
    

    所以,基本上,您只需要返回 ViewDataUploadFilesResult 集合的 jsonresult。

    希望对你有帮助。

    【讨论】:

    • 确实如此,谢谢。我在 SO 上搜索了很多次,但没有看到这个。
    • sj - 我完全明白你的意思,我是那种在寻找眼镜时会把眼镜放在头顶上的人:)
    • 使用上面的代码,我收到一个错误:“空文件上传结果”,因为响应不是文件[]数组。我在一个不相关的示例中找到了以下内容并对其进行了修改,希望此添加可以帮助遇到相同问题的任何人: var uploadFiles = new { files = r.ToArray() };返回 Json(uploadedFiles);
    • 感谢 dillon - 随时修改我的答案以使您的插件版本与这些更改相匹配。
    猜你喜欢
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    相关资源
    最近更新 更多