我将文件上传控件添加到我的ASP.NET 2.0的网页,使用户可以上传文件。 文件将被存储在服务器的文件夹中的名称作为用户的。 我想知道什么是保存到服务器时命名文件的最佳选择。 需要考虑安全性,性能,灵活性来处理文件等。如果我错过了什么,请引导我
选项我现在正在考虑:
- 具有相同的名称作为上传输入文件名
- 添加用户ID +随机数+文件名输入文件名
- 在几秒钟内创建随机数+当前时间并保存这个数字文件。 将有一个表来映射这个号码与用户上传
还要别的吗? 什么是最好的方法?
提前致谢
我将文件上传控件添加到我的ASP.NET 2.0的网页,使用户可以上传文件。 文件将被存储在服务器的文件夹中的名称作为用户的。 我想知道什么是保存到服务器时命名文件的最佳选择。 需要考虑安全性,性能,灵活性来处理文件等。如果我错过了什么,请引导我
选项我现在正在考虑:
还要别的吗? 什么是最好的方法?
提前致谢
永远不要使用文件名的用户输入。 不要使用用户名。 用户的用户ID,而不是(我假设你的用户有一个唯一的ID)。
切勿使用原来的文件名。 使用您的解决方案3号,加上用户ID而不是用户名。
为了您的信息,PHP,几年前有一个漏洞:一个可以加强与文件上传一个HTTP POST请求,并包含“../../anything.php”文件名,并且PHP _FILES数组,应该含有消毒的价值观,没有检测到这些类型的文件名,所以人们可以在文件系统中的任何位置写入文件。
我会使用的组合
例如PDF文件名:23212-dd503cf8-a548-4584-a0a3-39dc8be618df.pdf
这样一来,因为他/她想要的用户可以上传尽可能多的文件,没有文件名冲突,你还可以到用户,只要看一眼文件名指出哪些文件属于。
我不认为有必要包括在文件名中的其他任何信息,因为上传时间/日期,这样可以从该文件的属性进行检索。
此外,你应该将文件存储在安全的位置 ,其中外部用户,如您的网站的访问者无法访问。 相反,你通过代理网页(您阅读从安全位置的文件,并传递给用户的数据)交付文件给他们。 对于这个解决方案,需要一个数据库来跟踪文件,它们的位置,等等。
这也使您能够控制哪些用户可以访问哪些通过您的代码文件。
更新:这里有一个如何与代理网页的解决方案可以实现的描述。
GetFile.aspx
GetFile.aspx
需要命名一个查询参数fileid
,这是用来标识文件来获得。 例如: http://www.mypage.com/GetFile.aspx?fileid=100
fileid
参数来查找文件位置在数据库中,以便它可以读取和发送给用户。 在Web表单您使用Request.QueryString("fileid")
获取文件ID,并在查询中,将是这个样子(SQL)使用它: SELECT FileLocation FROM UserFiles WHERE写到FileID = 100
System.IO.FileStream
并输出其内容通过Response.Write
。 请记住,设置适当的内容类型使用Response.ContentType
第一,让客户端浏览器能够正确地处理请求的文件(见这个职位上asp.forums.net
和MDSN文章这也是在后称,这既讨论自动确定适当的内容类型)的方法。 如果您选择这种方法,可以很容易地以后实现自己的简单的安全或自定义操作,如确保用户登录到你的网站,你发送文件之前,或者用户只能访问文件,他们上传的自己,或记录哪些用户下载的文件等的可能性是无穷无尽;-)
看看在System.IO.Path类 ,因为它有很多的,你可以利用有用的功能,如:
检查哪些字符是一个文件名无效:
System.IO.Path.GetInvalidPathChars();
得到一个随机文件名:
System.IO.Path.GetRandomFileName();
获得一个独特的,randome名在临时目录
System.IO.Path.GetTempFileName();
我会去的选项#3。 表映射这些文件与用户提供其他用途的道路,它总是这样。 如果您使用的映射,附加的用户名或ID,以文件的唯一的好处是,如果你想调试问题。
我可能会使用GUID,而不是一个随机数,但无论是可行的。 在我看来,最重要的事情是
还有更多的这比满足眼睛......我在想,你已经知道了!
你说的是什么样的文件? 如果他们是什么,甚至远程大或数量等,该组文件可能是大我马上会建议你增加一些灵活性,以你的方法。
有了这个自然到位的系统 - 即使你不会/并不需要它前面 - 你现在可以更容易地重新定位文件。 您可以更好地管理文件。 您可以更好地管理文件的集合。 等我以前用过这个系统,并发现它是非常灵活。 与被存储到文件系统,而是设法从数据库中能有点失控,一旦文件存储变得如此之大,需要的东西得到了一下周围移动的文件处理。 此外,至少在Windows的情况下...存储文件不计其数在一个目录通常不是一个好主意(通过其创建日期打破东西的原因)。
当你有高产量和大脚印只有真正需要这种复杂性。