我正在修改现有的ASP.NET项目。原作者错误地尝试通过将其可见性设置为隐藏并仅创建两个自定义样式的浏览和保存按钮来创建样式化的asp:FileUpload。
出于安全原因,IE不允许这样做。我的策略是尝试使用type =“file”的输入标记,例如this example。因此,如果我设置像<input type="file" ID="inputFile" />
这样的输入,如何在我的代码中访问/保存文件inputFile.SaveAs("someFile.txt");
?另外(在后面的代码中)我可以做inputFile.HasFile
之类的事情,还是有其他类似的东西?
根据建议,我正在尝试以下内容:
<td>
Enabled: <asp:CheckBox ID="CheckBox2" runat="server" />
<div id="testFileUploader">>
<input type="file" id="browserHidden" runat="server" />
<div id="browserVisible"><input type="text" id="fileField" /></div>
</div>
</td>
答案 0 :(得分:12)
因此,您可以根据ASPX页面GUID
上的CodeBehind
为后续上传生成随机文件名:
HttpPostedFile filePosted = Request.Files["uploadFieldNameFromHTML"];
if (filePosted != null && filePosted.ContentLength > 0)
{
string fileNameApplication = System.IO.Path.GetFileName(filePosted.FileName);
string fileExtensionApplication = System.IO.Path.GetExtension(fileNameApplication);
// generating a random guid for a new file at server for the uploaded file
string newFile = Guid.NewGuid().ToString() + fileExtensionApplication;
// getting a valid server path to save
string filePath = System.IO.Path.Combine(Server.MapPath("uploads"), newFile);
if (fileNameApplication != String.Empty)
{
filePosted.SaveAs(filePath);
}
}
对于Request.Files["uploadFieldNameFromHTML"]
,请在此处设置HTML代码中的ID:
<input type='file' id='...' />
另外,不要忘记在ASPX页面的主窗体中定义runat="server"
,最好将其设置为主窗体,不要忘记{{1}的enctype="multipart/form-data"
参数}}:
<form>
答案 1 :(得分:2)
向对象添加runat =“server”。这样它就可以像任何asp:FileUpload控件一样在CodeBehid上工作。
答案 2 :(得分:1)
如评论所述,您可以将runat =“server”添加到输入文件标记中。
另一方面,已经有类似的帖子关于你要求的东西。看看这个:
Uploading Files in ASP.net without using the FileUpload server control
希望这个帮助
干杯!
答案 3 :(得分:0)
if(fileUrunResim.HasFile)
fileUrunResim.SaveAs(MapPath("~/Images/" + fileUrunResim.FileName));
**if you unique filename,**
string extension = Path.GetExtension(fileUrunResim.FileName);
string fileName = Guid.NewGuid().ToString().Substring(0, 25) + extension ;
if(fileUrunResim.HasFile)
fileUrunResim.SaveAs(MapPath("~/Images/" + filename ));