<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml xml:lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/vnd.wap.wml; charset=utf-8"/>
<meta http-equiv="Cache-Control" content="no-cache"/></head>
<card title="正确上传文件 - Gracecode.com">
<p>网站有很多地方需要交互，比方说有时候就需要用户上传文件。大部分的时候我都没有在乎这一点，我个人一向认为正确上传文件是常识。但当我整理某台服务器的时候，我发现有很多不合理的地方，于是写下来说说我的看法。这篇文件仅适合独立开 Blog，和打算珍惜服务器的每 1KB 资源的人阅读。</p>

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

<p>比如用户上传图片，jpg、gif 和 png 图片格式所能展现的效果和内容是不同的，但不建议采用上述格式以外的其他图片格式作为上传文件。<a href="http://zhidao.baidu.com/question/9411310.html" title="http://zhidao.baidu.com/question/9411310.html">这里，有一个连接详细解释这些内容</a>。</p>

<p>个人 Blog 的照片如果需要插图，可以考虑使用<a href="http://www.gracecode.com/Archive/Display/375" title="http://www.gracecode.com/Archive/Display/375">如 Yupoo 等图片共享网站</a>，当然前提是内容符合他们的要求。这样你本身就可以每个月就可以减轻一些存储空间，并且更有利于管理。文章插图容量应该控制在 500KB 以内，大小应该控制在 800px 一下（以最宽一边计算）。根据本人的经验，这样最适合阅读。</p>

<p>相同的道理，如果是自己的服务器，如果没有必要，尽量不要上传视频等文件，因为这些文件将会迅速耗费你的空间。你可以将一些公共的视频放到 <a href="http://www.youtube.com" title="http://www.youtube.com">Youtube</a> 等网站，这样也可以起到分流的作用。</p>

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

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

<p>随后，下面是作为一名开发者的一些开发经验。</p>

<p>永远不要怀疑脚本的破坏能力，<a href="http://www.gracecode.com/Archive/Display/343" title="http://www.gracecode.com/Archive/Display/343">小小的脚本可能就会毁了整台服务器</a>。所以避免 PHP、ASP、JSP 等这些服务器脚本上传，Windows 主机特别要注意避免用户上传可执行文件。*ix 服务器应上传操作以后立即将权限标记为 644 （目录权限为 755）。这个是第一条，而且是最总要的一条。</p>

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

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

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


<p>
<a href="http://www.gracecode.com/wap/">Gracecode.com</a> |
<a href="http://www.gracecode.com/wap/d/594 ">Permalink</a>(<a href="http://www.gracecode.com/Archive/Display/594 ">xHTML</a>) |
<a href="http://www.gracecode.com/Trackback/Recieve/594/59cv3s">Trackback</a> |
<a href="http://rss.gracecode.com">Rss</a>
</p>
</card>
</wml>