Ton*_*ony 8 c# asp.net file-upload
这是我第一次构建一个Web应用程序,仅用于处理用户上传的文件,我有一些关于如何正常完成的问题:
是否有任何安全问题需要考虑?要处理的文件本质上是我的应用程序将逐行读取的文本文件.我应该限制文件上传扩展名和/或是否还有其他预防措施?
上传文件的最佳组织方法是什么?这些文件不需要永久存储在我的应用程序中,所以我应该将它们转储到一般的"数据"文件夹中并删除不再需要的内容吗?
构建具有我错过的类似功能的Web应用程序还有其他重要方面吗?
谢谢
您必须注意的唯一安全问题是将原始文本(没有数据清理以防止SQL注入)插入数据库.如果没有涉及数据库,你应该没事.至于扩展,限制扩展实际上是一个糟糕的顶级过滤器.它有好处,但它只是深入了解文件真正包含的内容.文件大小限制也有帮助.
对于大量事务,保存到磁盘可能会很昂贵,但另一方面,随着使用更多请求/更多线程,它会使服务器内存更加混乱.您也可以使用内存中的文件,但对于大文件,它可能最终会有害.考虑一下您正在使用的内容并选择最佳方法.
定义一个超时,以便大的上传文件最终不会占用不必要的服务器进程,无论如何它都太大了.
我假设您正在使用ASP.NET的FileUpload控件.请记住,文件不会通过回发持续存在(以防止出现安全漏洞),因此用户每次请求页面时都必须继续浏览文件.如果您有服务器端验证器,这将是一个麻烦.
编辑回答评论:
通过在内存中工作,我正在讨论操纵纯粹通过代码上传的文件,而无需将其物理保存在服务器的磁盘上.
例如,如果您正在使用FileUpload控件,则可以通过Stream对象FileUpload.FileContent或字节数组FileUpload.FileBytes(API参考)访问用户的文件.因为这是一个Stream你可以随时读取文件而不必先保存它.
标记:
<asp:FileUpload ID="fileUploadControl" ToolTip="Upload a file" runat="server" />
Run Code Online (Sandbox Code Playgroud)
代码隐藏:
If fileUploadControl.HasFile AndAlso _
(fileUploadControl.FileName.ToLower().EndsWith(".txt") OrElse _
fileUploadControl.ToLower().FileName.EndsWith(".dat")) Then
SaveThisToDataBase(fileUploadControl.FileName, fileUploadControl.FileBytes)
End If
Run Code Online (Sandbox Code Playgroud)
看到?根本不需要保存到磁盘.fileUploadControl.FileBytes包含上传数据的bytearray.
如果要保存到文件,则可以使用该流写入磁盘.
| 归档时间: |
|
| 查看次数: |
2066 次 |
| 最近记录: |