关于文件上传介绍
•传统表单上传文件(造成网页刷新,不友好):
<form action="upload.aspx" method="post" enctype="multipart/form-data">
<input type="file" name="file1" />
<input type="submit" value="上传" />
</form>
•异步无刷新上传文件(抛开HTML5、ajax不说)
1.伪异步,实际就是将普通文件上传的方式放在一个iframe中
2.Flash上传,Flash程序读取本地文件上传到服务端,完成以后回调客户端JS函数,常见的组件:SWFUpload
如果IE9不支持该Flash组件,可以在元数据标签中加入:<meta http-equiv=“X-UA-Compatible” content=“IE=EmulateIE7”/>,强制浏览器以IE7的模式浏览页面
•SWFUpload使用:
- Flash把文件异步上传到服务器端的程序(服务器端程序通过Filedata域的值得到上传的文件),将文件以MD5命名保存下来
- 上传成功把结果通过upload_success_handler事件通知给程序(第一个参数为上传的文件,第二个参数为服务器的返回内容)。
- 服务器端程序和上传成功后的处理需要程序员编写。
•文件保存注意:
- 原文件名保存(×)
- 唯一标识,比如GUID、随机字符串(√)
- 文件流的MD5值(推荐,计算MD5值的方法见备注)
- 根据业务唯一性标识,如用户头像用用户ID作为文件名(推荐)
- 文件归档,便于管理,提高文件检索速度,如”/uploads/2014/07/”
- 安全限制,只允许上传某些特定扩展名的文件
/// <summary>
/// 计算文件的MD5值
/// </summary>
/// <param name="filepath"></param>
/// <returns></returns>
public static String GetStreamMD5(Stream stream)
{
string strResult = "";
string strHashData = "";
byte[] arrbytHashValue;
System.Security.Cryptography.MD5CryptoServiceProvider oMD5Hasher =
new System.Security.Cryptography.MD5CryptoServiceProvider();
arrbytHashValue = oMD5Hasher.ComputeHash(stream); //计算指定Stream 对象的哈希值
//由以连字符分隔的十六进制对构成的String,其中每一对表示value 中对应的元素;例如“F-2C-4A”
strHashData = System.BitConverter.ToString(arrbytHashValue);
//替换-
strHashData = strHashData.Replace("-", "");
strResult = strHashData;
return strResult;
}
作者: 木头园——OOIP
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
博文来源广泛,如原作者认为我侵犯知识产权,请尽快给我发邮件
664507902@qq.com联系,我将以第一时间删除相关内容。