你的位置:首页 > ASP.net教程

[ASP.net教程]asp.net mvc 上传文件


转至:http://www.cnblogs.com/fonour/p/ajaxFileUpload.html

0、下载 http://files.cnblogs.com/files/fonour/ajaxfileupload.js

1、引用ajaxfileupload.js

<script src="../../Content/js/jquery-2.1.4.min.js"></script><script src="../../Content/js/ajaxfileupload.js"></script>

2、页面添加类型为file的input标签

<input type="file" id="filePicture" name="filePicture" accept=".jpg,.jpeg,.png,.bmp" onchange="filePictureChange()" />

3、添加了onchange事件,在选择文件后立即上传文件,onchange时间定义如下

var filePictureChange = function(){  $.ajaxFileUpload({     type: "post",             //请求类型:post或get,当要使用data提交自定义参数时一定要设置为post     url: "/Shared/Upload",         //文件上传的服务器端请求地址      secureuri: false,           //是否启用安全提交,一般默认为false就行,不用特殊处理      fileElementId: "filePicture",     //文件上传控件的id  <input type="file" id="filePicture" name="filePicture" accept=".jpg,.jpeg,.png,.bmp" onchange="filePictureChange()" />     dataType: "json",           //返回值类型,一般设置为json,还支持html\      data: { "id": "1", "name": "test" },  //用于post请求提交自定义参数      success: function (data, status) {   //服务器成功响应处理函数      },      error: function (data, status, e) {  //服务器响应失败处理函数      }    });}

4、后台控制器方法

/// <summary>    /// 附件上传    /// </summary>    /// <returns></returns>    public ActionResult Upload()    {      HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;      if (files.Count == 0) return Json("Faild", JsonRequestBehavior.AllowGet);      MD5 md5Hasher = new MD5CryptoServiceProvider();      /*计算指定Stream对象的哈希值*/      byte[] arrbytHashValue = md5Hasher.ComputeHash(files[0].InputStream);      /*由以连字符分隔的十六进制对构成的String,其中每一对表示value中对应的元素;例如“F-2C-4A”*/      string strHashData = System.BitConverter.ToString(arrbytHashValue).Replace("-", "");      string FileEextension = Path.GetExtension(files[0].FileName);      string uploadDate = DateTime.Now.ToString("yyyyMMdd");      string virtualPath = string.Format("/Data/ComponentAttachments/{0}/{1}{2}", uploadDate, strHashData, FileEextension);      string fullFileName = Server.MapPath(virtualPath);      //创建文件夹,保存文件       string path = Path.GetDirectoryName(fullFileName);      Directory.CreateDirectory(path);      if (!System.IO.File.Exists(fullFileName))      {        files[0].SaveAs(fullFileName);      }      string fileName = files[0].FileName.Substring(files[0].FileName.LastIndexOf("\\") + 1, files[0].FileName.Length - files[0].FileName.LastIndexOf("\\") - 1);      string fileSize = GetFileSize(files[0].ContentLength);      return Json(new { FileName = fileName, FilePath = virtualPath, FileSize = fileSize }, "text/html", JsonRequestBehavior.AllowGet);    }    /// <summary>    /// 获取文件大小    /// </summary>    /// <param name="bytes"></param>    /// <returns></returns>    private string GetFileSize(long bytes)    {      long kblength = 1024;      long mbLength = 1024 * 1024;      if (bytes < kblength)        return bytes.ToString() + "B";      if (bytes < mbLength)        return decimal.Round(decimal.Divide(bytes, kblength), 2).ToString() + "KB";      else        return decimal.Round(decimal.Divide(bytes, mbLength), 2).ToString() + "MB";    }