Member 10323752 Ответов: 2

Может ли кто-нибудь помочь мне с этим кодом C# в Handler.ashx


Привет всем , я пытаюсь сохранить путь к изображению в виртуальной папке с помощью jquery и класса обработчика, чтобы он не возвращался на страницу ниже приведены мои коды, пожалуйста, исправьте его и, если это возможно, исправьте его

$.ajax({
        dataType:'json',
        type: 'POST',
        url: 'Handler1.ashx?imagepath="'+file+'"&filename=cool',
        data: { 'Path': '"' + file + '"' },
        success: function (response) {
            alert("posted");
        }
});

это для передачи параметров в класс обработчик с помощью jQuery

public void ProcessRequest(HttpContext context)
        {
            var file = context.Request.QueryString["imagepath"].Replace("/", "\\");
            string savedFileName = "";
            string Path = context.Request["Path"];
            savedFileName = context.Server.MapPath("Image");
            context.Request.Files[0].SaveAs(savedFileName);
        }




public bool IsReusable
        {
            get
            {
                return false;
            }
        }

Пожалуйста, помогите мне сохранить изображение в виртуальной папке Изображение в моем проекте трудность, с которой я сталкиваюсь, заключается в том, что
context.Request.Files[0].SaveAs(savedFileName);
это показывает мне ошибку
Цитата:
Индекс был вне досягаемости. Должно быть неотрицательным и меньше размера коллекции.
Любая помощь будет оценена по достоинству! заранее спасибо..

Sergey Alexandrovich Kryukov

Пожалуйста, отформатируйте код правильно, с тегами "pre". Я попытался исправить это, вы можете увидеть, как выглядит формат, если вы нажмете кнопку "улучшить вопрос".
—СА

2 Ответов

Рейтинг:
16

Member 10323752

Этот код поможет каждому получить файл, загруженный в папку без обратной передачи...
Единственное, что осталось, чтобы получить ответ от обработчика, что Файл был загружен
любая дальнейшая помощь будет оценена по достоинству.

(Библиотека jQuery)

function clked() {
    var fileUpload = $("#up").get(0);
    var files = fileUpload.files;
    var src = $("#up")[0].value;
    var name = src.split('').reverse().join('');
    var revercedName = name.split('\\');
    var files_name=revercedName[0].split('').reverse().join("");
    var data = new FormData();
    for (var i = 0; i < files.length; i++) {
        data.append(files[i].name, files[i]);
    }
    $.ajax({
        dataType: 'json',
        type: 'POST',
        processData: false,
        contentType: false,
        url: 'Handler1.ashx?imagename=' + files_name + '',
        data: data,
        success: function (response) {
            alert("posted");
        }
    });
}


Код C# в обработчике

public void ProcessRequest(HttpContext context)
       {
           var file = context.Request.QueryString["imagename"];
           //var file = context.Request.QueryString["imagepath"].Replace("/", "\\");
           string savedFileName = context.Server.MapPath("Image/" + file);
           context.Request.Files[0].SaveAs(savedFileName);

       }

       public bool IsReusable
       {
           get
           {
               return false;
           }
       }


Рейтинг:
1

Azee

Эй там,

Вам нужно убедиться, что вы сделали то, что описано ниже:

1 - Добавить enctype="multipart/form-data" свойство в теге формы вашей страницы.

2 - я создаю пример, чтобы увидеть, как он работает, следуйте ему в своем собственном коде:
aspx:

<asp:fileupload runat="server" id="file" onchange="upload();" />

Jquery:
function upload() {
            var fileUpload = $("#file").get(0);
            var files = fileUpload.files;

            var data = new FormData();
            for (var i = 0; i < files.length; i++) {
                data.append(files[i].name, files[i]);
            }
            $.ajax({
                dataType: 'json',
                type: 'POST',
                processData: false,
                contentType: false,
                url: '/AjaxFileUpload/AjaxUpload.ashx',
                data: data,
                success: function (response) {
                    alert("posted");
                }
            });
        }


Замените URL-адрес вашим собственным URL-адресом обработчика и идентификатором элемента управления FileUpload, и вы можете идти.
[Edit]используйте последнюю версию библиотеки JQuery в своем приложении, чтобы заставить его работать.[/Редактировать]

Овации.

Дай мне знать, если это поможет.

Ази...


leexb

я пытаюсь запустить ваш код ,все та же ошибка.
контексте.Запрос.Files.count=0 в файле AjaxUpload.ashx

Azee

Можете ли вы опубликовать свой обновленный код (jquery и aspx), чтобы я мог воспроизвести его здесь и посмотреть, что не так.

leexb

страница ASPX:

в <html-код атрибута xmlns="http://www.w3.org/1999/xhtml от" XML:Ланг="Ан"&ГТ;
<голова>
в <название&ГТ;&ЛТ;/название&ГТ;
&ЛТ;скрипт СРЦ="Scripts/jquery-1.4.1.min.js" тип="текст/JavaScript"&ГТ;&ЛТ;/скрипт>

<script type="text/javascript">
функция загрузки() {
var fileUpload = $("#file").get(0);
var files = fileUpload.файлы;

var data = новые данные формы();
для (var i = 0; i < files.длина; i++) {
данных.добавить(файлы[я].имя файлов[я]);
}
$.Аякс({
тип данных: 'json',
тип: "почта",
processData: false,
contentType: false,
URL-адрес: 'протоколу.данного',
данные: данные,
успех: функция (ответ) {
оповещение("опубликовано");
}
});
}
</script>
</head>
<тело>
&ЛТ;форме ID="форма" действий="" атрибут runat="сервер" enctype="multipart/данные формы"и GT;
&ЛТ;как ASP:fileupload с атрибут runat="сервер" идентификатор="файл" onChange, после="выгрузить();" /&ГТ;
</форма>
</body>
</html>

Протоколу.данного:

протоколу публичных класс : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
граф инт = контекст.Запрос.Файлы.Рассчитывать;
}

public bool IsReusable
{
получить
{
возвращать false;
}
}
}

Azee

Эй, скачать последний JQuery.js и заменить на <скрипт СРЦ="Scripts/jquery-1.4.1.min.js" тип="текст/JavaScript"&ГТ;&ЛТ;/скрипт> С, что один. Это сработает.

дайте мне знать.

Member 10323752

Хай спасибо, что я сделал сохранение файлов с вашей помощью... Спасибо, я опубликую обновленные коды прямо сейчас, чтобы каждый мог их получить. Теперь, по крайней мере, обратной связи не будет.

Azee

Если это помогло, вы также можете отметить это как решение. :)