Html5 Drag & Drop с всплывающим окном для загрузки удаленных файлов на сервер (asp.net)

0

Я использую перетаскивание HTML5 на моем сайте (веб-приложение asp.net). процесс загрузки должен быть выполнен во всплывающем окне с индикатором выполнения для каждого файла (поэтому страница, содержащая область перетаскивания, будет продолжать асинхронизацию). Мне нужно получить доступ к файлам с сервера (С#), а не только от javascript. Проблема заключается в том, что context.Request.Files пуст во всплывающем окне. когда я пробовал писать весь код на той же странице Request.Files был заполнен.

Вот мой код:

открытие popupwindoe с "родительской" страницы (jquery):

 function handleDnDFileSelect(event) {
        event.stopPropagation();
        event.preventDefault();
        /* Read the list of all the selected files. */
        files = event.dataTransfer.files;
        var fileCount = files.length;
        // Only call the handler if 1 or more files was dropped.
        if (fileCount > 0) {
            window.open("UploadProgress.aspx", "progress", 'menubar=1,resizable=1,width=750,height=450');
        } 
    }

uploadProgress.aspx:

<script>
$(document).ready(function () {
    debugger;
    var files = window.opener.files; //files is full corectly
    var form = document.getElementById('form1');
    var data = new FormData(form);
    for (var i = 0; i < files.length; i++) //creating a new XMLHttpRequest for each file
    {
        data.append(files[i].name, files[i]);
        var xhr = new XMLHttpRequest();
        xhr.open('POST', "UploadProgress.aspx");
        xhr.send(data);
    }
});
</script>
<body>
<form id="form1" runat="server" data-ajax="false" enctype="multipart/form-data">
<asp:Repeater ID="rptFilesUpload" runat="server">
 <ItemTemplate>
    <div id="progressbar">
        <asp:Label ID="lblFileName" runat="server" Text='<%# Container.DataItem %>' ></asp:Label>
    </div>
 </ItemTemplate>
</asp:Repeater>
</form></body>

uploadProgress.aspx.cs:

public partial class UploadProgress : System.Web.UI.Page, IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "multipart/form-data";
        HttpFileCollection fileCollection = context.Request.Files;// Session["Files"] as HttpFileCollection;
        ArrayList FilesNames = new ArrayList();
        for (int i = 0; i < fileCollection.Count; i++)
        {
            HttpPostedFile upload = fileCollection[i];
            string filename = "c:\\Test\\" + upload.FileName;
            upload.SaveAs(filename);
            //update arrayList for the repeater
            FilesNames.Add(upload.FileName);
        }
        rptFilesUpload.DataSource = FilesNames;
        rptFilesUpload.DataBind();
    }

Что я делаю не так? Я ищу решение в течение нескольких дней......... Я буду признателен за любую попытку решить мою проблему.

Теги:
file-upload

1 ответ

0
Лучший ответ

Я все еще не знаю, почему это не сработало. но я просто положил функцию ProcessRequest в ashx (обработчик) и изменил xhr.open("POST", "UploadProgress.aspx"); xhr.open("POST", "UploadProgressHandler.ashx"); и это сработало! (только в FireFox и Chrome. В IE (10+) я все еще ищу решение)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню