网站有很多地方需要交互,比方说有时候就需要用户上传文件。大部分的时候我都没有在乎这一点,我个人一向认为正确上传文件是常识。但当我整理某台服务器的时候,我发现有很多不合理的地方,于是写下来说说我的看法。这篇文件仅适合独立开 Blog,和打算珍惜服务器的每 1KB 资源的人阅读。

用户的角度上说,上传正确的文件应是自律为主。上传文件应该遵守两个原则,首先就是确定这个文件一定会使用到才会上传,其次就是是尽量的小。下面,我举例说明一下。

比如用户上传图片,jpg、gif 和 png 图片格式所能展现的效果和内容是不同的,但不建议采用上述格式以外的其他图片格式作为上传文件。 这里,有一个连接详细解释这些内容

个人 Blog 的照片如果需要插图,可以考虑使用 如 Yupoo 等图片共享网站 ,当然前提是内容符合他们的要求。这样你本身就可以每个月就可以减轻一些存储空间,并且更有利于管理。文章插图容量应该控制在 500KB 以内,大小应该控制在 800px 一下(以最宽一边计算)。根据本人的经验,这样最适合阅读。

相同的道理,如果是自己的服务器,如果没有必要,尽量不要上传视频等文件,因为这些文件将会迅速耗费你的空间。你可以将一些公共的视频放到 Youtube 等网站,这样也可以起到分流的作用。

永远不要怀疑蜘蛛的力量,文件一旦上传到服务器上,即便是没有做任何的连接,都有可能被访问到(愚蠢的服务器)。所以千万不要将你的个人资料等上传到服务器上。否则,除了会浪费服务器空间以外,还会引起不必要的麻烦。

上传的文件应该尽量避免空格、中文、全角标点符号等字符,因为服务器不一定能正确处理这些文件(虽然有点小题大作)。最好的做法是建议采用英文、数字和下划线组合而成的便于理解的文件名。

随后,下面是作为一名开发者的一些开发经验。

永远不要怀疑脚本的破坏能力, 小小的脚本可能就会毁了整台服务器 。所以避免 PHP、ASP、JSP 等这些服务器脚本上传,Windows 主机特别要注意避免用户上传可执行文件。*ix 服务器应上传操作以后立即将权限标记为 644 (目录权限为 755)。这个是第一条,而且是最总要的一条。

如果用户不是非常的在意,我们应该帮助他们重新生成上传文件的文件名。文件名应该包含文件上传日期等有规律的名称,这样在便于区分的同时也便于按照特征备份。重命名的文件明建议采用小写(这个是我的个人习惯)。

最后,建议应该适当的放松上传验证的机制。请不要误解我上句话的意思。比如上面我所说的上传的图片格式,在「逃避」了客户端的校验以后,发现用户还是上传了张 BMP 的图片,这个时候应该在适当允许的范围内,可以考虑将其转换成指定的适当格式存储,而不是「迂腐」地报错。

就是这些了,应该还有其他的一些更有用的经验,为了避免以偏概全,欢迎大家一起探讨。