关于文件上传介绍

•传统表单上传文件(造成网页刷新,不友好):

<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;
        }

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
博文来源广泛,如原作者认为我侵犯知识产权,请尽快给我发邮件 664507902@qq.com联系,我将以第一时间删除相关内容。

posted @ 2015-09-20 22:36  木头园—OOIP  阅读(374)  评论(0)    收藏  举报