Ошибка загрузки файла Jquery при отправке в ashx - PullRequest
2 голосов
/ 22 февраля 2011

Я пытаюсь использовать расширение Jquery для загрузки файлов для асинхронной загрузки файлов в обработчик C3 http.Я прошел все этапы настройки на сайте GitHub для проекта.Похоже, что он отлично работает в Firefox, но выдает ошибку JavaScript в IE («Исключение выброшено и не перехвачено». Строка 95, Char 25, File: test.html), даже если файл успешно загружен.Я думаю, что моя проблема связана с ответом моего Ashx.Кто-нибудь может увидеть, что я делаю неправильно?

Вот тело HTML-кода для моей страницы (test.html):

<form id="file_upload" action="testupload.ashx" method="POST" enctype="multipart/form-data">
    <input type="file" name="file" multiple>
    <button>Upload</button>
    <div>Upload files</div>
</form>
<table id="files"></table>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js"></script>
<script src="../Script/jquery.fileupload.js"></script>
<script src="../Script/jquery.fileupload-ui.js"></script>
<script>
/*global $ */
$(function () {
    $('#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>');
        }
    });
});
</script>

Вот код в моем ашх:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;


namespace Testing
{
    /// <summary>
    /// Summary description for $codebehindclassname$
    /// </summary>
    public class TestUpload : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            HttpPostedFile fileupload = context.Request.Files[0];


            string strFileName = Path.GetFileName(fileupload.FileName);
            string strExtension = Path.GetExtension(fileupload.FileName).ToLower();
            string strSaveLocation = context.Server.MapPath("Upload") + "\\" + strFileName;
            fileupload.SaveAs(strSaveLocation);

            context.Response.ContentType = "text/plain";
            context.Response.Write("{\"name\":\"" + fileupload.FileName + "\",\"type\":\"" + fileupload.ContentType + "\",\"size\":\"" + fileupload.ContentLength + "\"}");
        }

        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
    }
}

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Попробуйте изменить:

context.Response.Write("{\"name\":\"" + fileupload.FileName + "\",\"type\":\"" + fileupload.ContentType + "\",\"size\":\"" + fileupload.ContentLength + "\"}");

На это:

context.Response.Write("{\"name\":\"" + fileupload.FileName + "\", type:\"" + fileupload.ContentType + "\",size:\"" + fileupload.ContentLength + "\"}");

Ваш объект, который вы передавали назад, был просто поврежден.Это должно сработать.

0 голосов
/ 22 февраля 2011

Мне удалось заставить это работать ...

Сначала я попытался использовать жестко закодированные значения для имен, типов и размеров ответов и обнаружил, что это работает. Вот что я использовал:

context.Response.Write("{\"name\":\"test\",\"type\":\"test\",\"size\":\"12345\"}");

Затем я заметил, что fileupload.FileName указывает полный путь к файлу, и предположил, что это проблема. Когда я изменяю fileupload.FileName на strFileName в моей строке response.write, он успешно работает как в Firefox, так и в IE. Вот строка, которая работает:

context.Response.Write("{\"name\":\"" + strFileName + "\",\"type\":\"" + fileupload.ContentType + "\",\"size\":\"" + fileupload.ContentLength + "\"}");
...