自分のサイト (asp.net Web アプリケーション) で HTML5 ドラッグ アンド ドロップ アップロードを使用しています。アップロード プロセスは、各ファイルの進行状況バーを含むポップアップ ウィンドウで実行する必要があります (そのため、ドラッグ領域を含むページは非同期で実行され続けます)。javascript だけでなく、サーバー (C#) からファイルにアクセスする必要があります。問題は、ポップアップ ウィンドウで context.Request.Files が空であることです。同じページにすべてのコードを書き込もうとしたときに Request.Files がいっぱいでした。
これが私のコードです:
「親」ページ (jquery) から popupwindoe を開く:
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');
}
}
アップロード進行状況.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();
}
私は何を間違っていますか?私は何日もの間解決策を探しています..........私の問題を解決するための試みに感謝します。