我有一个asp上传器,当用户上传图像时会显示,但用户可以删除图像,但不会从Request.Files中删除,然后上传图像。如何从javascript中删除Request.Files?
StepOne.aspx:http://pastebin.com/EUCX783r StepOne.aspx.cs:http://pastebin.com/aZ3UtV2F
答案 0 :(得分: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 :(得分:0)
好吧也许我错了但是通过检查你的代码我只找到了代码来删除图片HTML标签,但是看不到任何代码从FileList中删除文件,我猜这就是原因