在我下面的代码中,我正在尝试通过ASP.NET上传文件。我动态创建FileUpload控件,这意味着它不在我的ViewState中(我认为)意味着我不能使用控件上传文件,除非我使用旧式的multipat / form-data方式,我不想做。我需要能够允许用户创建多个FileUpload字段,然后当他们单击Upload File(s)按钮时,它会遍历所有FileUpload字段并将它们上传到服务器。
我确信有一种方法可以做到这一点,我只是没想到 - TIA!
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim fup As New FileUpload()
fup.ID = "FileUpload1"
PlaceHolder1.Controls.Add(fup)
End Sub
Protected Sub btnUploadFile_Click(ByVal sender As Object, ByVal e As System.EventArgs)
' HOW DO I GET THE FILE THAT WAS SELECTED IN THE DYNAMICALLY CREATE FILEUPLOAD CONTROL?
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div style="padding:13px">
<asp:Button ID="btnAdd" runat="server" Text="Add FileUpload Control" OnClick="btnAdd_Click" />
<br /><br />
<asp:PlaceHolder ID="PlaceHolder1" runat="server" />
<br /><br />
<asp:Button ID="btnUploadFile" runat="server" Text="Upload File(s)" OnClick="btnUploadFile_Click" />
</div>
</form>
</body>
</html>
答案 0 :(得分:2)
您可以使用Request.Files
它包含上传的文件作为HttpPostedFile对象。
foreach(HttpPostedFile file in Request.Files)
file.SaveAs(...);
答案 1 :(得分:1)
这是上面的更长版本:C#
print("HttpFileCollection UploadedFiles = Request.Files;
HttpPostedFile UserPostedFile;
int UploadFileCount = UploadedFiles.Count;
if (UploadFileCount >= 1)
{
for (int i = 0; i < UploadFileCount; ++i)
{
UserPostedFile = UploadedFiles[i];
UserPostedFile.SaveAs(UserPostedFile.FileName);
}
}");
答案 2 :(得分:0)
问题是FileUpload控件已锁定FileName参数以编程方式设置。这样做的原因是为了保护用户免受某些恶意脚本的影响,决定它想要将系统文件上传到服务器而不是用户想要的内容。
在上述情况下,您将无法使用FileUpload控件,您将需要寻找替代方案。