C# 在asp.net web应用程序中使用用户上载文件的标准实施规程
这是我第一次为处理用户上传的文件而构建web应用程序,我有一些关于如何正常完成的问题:C# 在asp.net web应用程序中使用用户上载文件的标准实施规程,c#,asp.net,file-upload,C#,Asp.net,File Upload,这是我第一次为处理用户上传的文件而构建web应用程序,我有一些关于如何正常完成的问题: 我是否需要考虑任何安全问题?要处理的文件本质上是我的应用程序逐行读取的文本文件。我是否应该限制文件上载扩展名和/或是否应该考虑任何其他预防措施 上传文件的最佳组织方式是什么?这些文件不需要永久存储在我的应用程序中,所以我是否应该将它们转储到一个普通的“数据”文件夹中,并删除不再需要的文件 在构建具有类似功能的web应用程序时,我是否还遗漏了其他重要方面 谢谢我不知道我的答案有多“标准”,但以下是我在进行类似设
谢谢我不知道我的答案有多“标准”,但以下是我在进行类似设置时所做的:
- 我将文件扩展名限制为少数几种文件类型,只是为了更难上传坏文件。这很容易规避,但至少这是恶意用户必须采取的又一个步骤
- 我必须将IIS下的IUSR帐户的写入权限添加到存储文件的文件夹中。此文件夹是我的应用程序根文件夹的子文件夹
- 我必须处理很多文件,所以我每个月都创建一个新的子文件夹,比如
,上传的\012
,等等。这使得文件访问速度更快,因为每个文件夹中只有几百个文件。我将每次上传都存储在数据库中,并安排了一项定期清理文件系统的任务。这也删除了旧的空文件夹上传的\022012
FileUpload
控件。请记住,文件不会通过回发保持不变(以防止安全漏洞),因此每次请求页面时,用户都必须继续浏览文件。如果您有服务器端验证程序,这将是一个麻烦
编辑以回答评论: 通过在内存中工作,我指的是纯粹通过代码来操作上传的文件,而不是将其物理保存在服务器的磁盘上 例如,如果您正在使用
FileUpload
控件,则可以通过流对象FileUpload.FileContent
或作为字节数组FileUpload.FileBytes
()访问用户的文件。因为这是一个流
,所以您可以动态读取文件,而不必先保存它
标记:
<asp:FileUpload ID="fileUploadControl" ToolTip="Upload a file" runat="server" />
If fileUploadControl.HasFile AndAlso _
(fileUploadControl.FileName.ToLower().EndsWith(".txt") OrElse _
fileUploadControl.ToLower().FileName.EndsWith(".dat")) Then
SaveThisToDataBase(fileUploadControl.FileName, fileUploadControl.FileBytes)
End If
看到了吗?根本不需要保存到磁盘fileUploadControl.FileBytes
包含上传数据的字节数组
如果要保存到文件,则可以使用流写入磁盘。如果不需要存储文件,可以组织哪些内容?只需读取流,处理它并丢弃。如果不需要,则无需实际保存文件。@Jamiec我不知道您可以这样做。您是说文件在客户端读取,数据发送到服务器吗?您可以如何执行此操作?@Tony该文件由浏览器读取并发送到服务器。如果您想在内存中读取流,您可以在处理完后将其丢弃。不过,这可能会给服务器带来压力,具体取决于您的流量。将文件保存到磁盘的速度肯定较慢,但在给定时间使用的资源较少,如果出现问题,您可以延迟处理。我的数据库查询是参数化的,因此注入应该可以。这些文件相对较小,但我不熟悉你所说的在内存中处理文件的意思。您是否有任何示例或参考链接?