jQuery文件上传插件要求我下载文件,有什么问题?

时间:2011-02-23 01:52:23

标签: jquery-plugins asp.net-mvc-3

我正在使用https://github.com/blueimp/jQuery-File-Upload,我能够将文件上传并保存到指定文件夹,然后返回Json对象。然后浏览器(我使用IE8)弹出“文件下载”对话框,并要求我下载一个名为“upload75bea5a4”的文件,没有扩展名。我无法弄清楚出了什么问题?

3 个答案:

答案 0 :(得分:7)

我正在使用相同的插件,它对我没有任何问题。我会发布我正在使用的代码,这样可以帮助你。我在Scott Hanselman's blog看到的C#代码(我做了一些改动)。

用于存储文件属性的类:

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

上传代码,由ajax调用:

    [HttpPost]
    public string 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 "{\"name\":\"" + r[0].Name + "\",\"type\":\"" + r[0].Type + "\",\"size\":\"" + string.Format("{0} bytes", r[0].Length) + "\"}";
    }

制作魔术的javascript片段:

$('#file_upload').fileUploadUI({
    uploadTable: $('#files'),
    downloadTable: $('#files'),
    buildUploadRow: function (files, index) {
        return $('<tr><td>' + files[index].name + '<\/td>' +
                '<td class="file_upload_progress"><div><\/div><\/td>' +
                '<td class="file_upload_cancel">' +
                '<button class="ui-state-default ui-corner-all" title="Cancel">' +
                '<span class="ui-icon ui-icon-cancel">Cancel<\/span>' +
                '<\/button><\/td><\/tr>');
    },
    buildDownloadRow: function (file) {
        return $('<tr><td>' + file.name + '<\/td><\/tr>');
    }
});

看看并做一些测试。

-

修改

I wrote an article about it

答案 1 :(得分:0)

在常见问题解答中找到了这个。见#2 https://github.com/blueimp/jQuery-File-Upload/wiki/Frequently-Asked-Questions

要点是当HTTP_ACCEPT标头不存在或者不包含“应用程序/ json”时,将内容类型设置为text / plain。 (在xhr上传时推断iframe)。

+1 D. Sousa提醒enctype =&#34; multipart / form-data&#34; - 我遇到了内容类型。

答案 2 :(得分:0)

我有同样的问题。对于.Net,用于检查MVC中内容类型的代码如下所示:

if (Request.ServerVariables["HTTP_ACCEPT"] != null && Request.ServerVariables["HTTP_ACCEPT"].Contains("application/json"))
{
    return Json(data, "application/json");
}
else
{
    return Json(data, "text/plain");
}

显然,IE不喜欢Content-type: text/plain,而是text/plain

希望这能让人更加头疼。