Плагин jQuery File Upload просит меня скачать файл, что не так? - PullRequest
2 голосов
/ 23 февраля 2011

Я использую https://github.com/blueimp/jQuery-File-Upload, и мне удалось загрузить и сохранить файл в назначенную папку, а затем я возвращаю объект Json. Затем браузер (я использую IE8) открывает диалоговое окно «Загрузка файла» и просит меня загрузить файл с именем «upload75bea5a4» без расширения. Я просто не мог понять, что не так?

Ответы [ 3 ]

7 голосов
/ 23 февраля 2011

Я использую тот же плагин, и он работает без проблем для меня. Я опубликую коды, которые я использую, чтобы помочь вам. Код 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>');
    }
});

Посмотрите и сделайте несколько тестов.

-

EDIT

Я написал статью об этом .

0 голосов
/ 06 марта 2013

У меня была такая же проблема.Для .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.

Надеюсь, это кого-то спасетдальнейшая головная боль.

0 голосов
/ 04 августа 2011

Только что нашел это в FAQ. Смотрите № 2 https://github.com/blueimp/jQuery-File-Upload/wiki/Frequently-Asked-Questions

Суть заключается в том, чтобы установить тип содержимого на text / plain, если заголовок HTTP_ACCEPT не существует или не содержит 'application / json' (выводя iframe при загрузке xhr).

+ 1 для напоминания Д. Соузы для enctype = "multipart / form-data" - я столкнулся с этим, а также с типом содержимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...