2013-02-08 73 views
2

我有一個asp上傳器,當用戶上傳圖片時,它會顯示,但用戶可以刪除圖片,但不會從Request.Files中刪除,然後圖片將被上傳。我怎樣才能從Request.Files從JavaScript中刪除它?從Request.Files中刪除文件

StepOne.aspx:http://pastebin.com/EUCX783r StepOne.aspx.cs:http://pastebin.com/aZ3UtV2F

+0

您可以檢查[博客帖]的這個鏈接(http://scottonwriting.net/sowblog/archive/2012/03/31/uploading-a-variable-number-of -files-from-an-asp-net-web-page.aspx),它在上傳文件之前刪除附加上傳的文件元素 –

+0

我不知道這篇博文是否可以應用到我的代碼中...至少我不知道如何做它..這可能是因爲我對JQuery一無所知=/ – user2013107

回答

2

你不能直接從FileList中刪除文件,因爲它是隻讀的。您可以通過將其設置爲「」來刪除Files集合中的所有文件:

document.getElementById('files').value = ""; //Removes all files in the input 

但是,這不適用於單個文件。

建議的解決方法

可以容易處理這個由包括你的表單中一個隱藏的輸入元素和監控是這個隱藏輸入中標記爲刪除的文件。

<input id='filesToDelete' name='filesToDelete' runat='server' type='hidden' /> 

在執行您刪除(使用Javascript假設),你可以將文件名添加到您的filesToDelete場(這將是逗號分隔):

//Within your delete Javascript method 
document.getElementById('filesToDelete').value += (yourImg.title + ","); 

當上傳發布到服務器,您可以指定僅上載那些不包含在文件列表中的文件。就在逗號分隔值存儲到一個集合,如果你願意的話,使用LINQ查詢的收集和比較它發佈文件:

protected void YourUploadButton_Click(object sender, EventArgs e) 
{ 
     //Get files to be deleted 
     string[] filesToDelete = this.filesToDelete.Value.Split(','); 

     //Your collection of files 
     HttpFileCollection uploadFiles = Request.Files; 
     for (int i = 0; i < uploadFiles.Count; i++) 
     { 
      //Checks the Posted File 
      HttpPostedFile postedFile = uploadFiles[i]; 
      //If it isn't a file meant for deletion - don't upload 
      if (!filesToDelete.Any(c => c == postedFile.FileName)) 
      { 
       UploadToFTP(postedFile, i); 
      } 

     } 
} 

你只需要包括在頂部的參考LINQ您的代碼隱藏頁:

using System.Linq; 
+1

謝謝!你解決了我的問題! – user2013107

0

好吧,也許我錯了,但通過檢查你的代碼,我只找到的代碼刪除圖片的HTML標記,但不能看到任何代碼中刪除FileList,我想這就是原因

+0

是的人!這就是我所要求的,我不知道我需要用什麼代碼從FileList中刪除文件,我應該怎麼做才能刪除它? – user2013107

+0

檢查這個職位:http://forums.asp.net/t/1218942.aspx –

+0

我沒有得到它,但我要去閱讀和再次閱讀,並繼續traying。 – user2013107