我有一个 asp 上传器,当用户上传图像时,它会显示出来,但用户可以删除图像,但它不会从 Request.Files 中删除,然后图像将被上传。如何从 javascript 的 Request.Files 中删除它?
StepOne.aspx:http ://pastebin.com/EUCX783r StepOne.aspx.cs: http : //pastebin.com/aZ3UtV2F
我有一个 asp 上传器,当用户上传图像时,它会显示出来,但用户可以删除图像,但它不会从 Request.Files 中删除,然后图像将被上传。如何从 javascript 的 Request.Files 中删除它?
StepOne.aspx:http ://pastebin.com/EUCX783r StepOne.aspx.cs: http : //pastebin.com/aZ3UtV2F
您不能直接从 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;
好吧,也许我错了,但是通过检查您的代码,我只找到了删除图像 HTML 标记的代码,但看不到从 FileList 中删除文件的任何代码,我想这就是原因