另一种图片上传 jquery.fileupload.js

今天遇到另外一种上传图片方法

用jquery.fileupload.js

  <input type="file" name="file[]" multiple id="fileupload">

一个文件类型的元素

$("#fileupload").fileupload({

datatype:"json",

url: "/File/UploadFiles",
done: function (e, data) { //上传结束的操作 

if (data.result[0].result != "OK") //不成功的时候 弹出消息
{
alert(data.result[0].result);
}
else
{
$("#imgshow").attr("src", data.result[0].thumbnail_url); //成功的时候显示图片
}

}

})

上面的url 处理当选择完成图片后进行的上传操作

 public string path = "~/Files";

 [HttpPost]
        public ActionResult UploadFiles()
        {
            var r = new List<ViewDataUploadFilesResult>();
            foreach (string file in Request.Files)
            {
                var statuses = new List<ViewDataUploadFilesResult>();
                var headers = Request.Headers;

                if (string.IsNullOrEmpty(headers["X-File-Name"]))
                {
                    UploadWholeFile(Request, statuses);
                }
                else
                {
                    UploadPartialFile(headers["X-File-Name"], Request, statuses);
                }

                JsonResult result = Json(statuses);
                result.ContentType = "text/plain";

                return result;
            }

            return Json(r);
        }

上面是uploadfiles方法。

ViewDataUploadFilesResult是定义的文件类
  public class ViewDataUploadFilesResult
    {
        public string name { get; set; }
        public int size { get; set; }
        public string type { get; set; }
        public string url { get; set; }
        public string delete_url { get; set; }
        public string thumbnail_url { get; set; }
        public string delete_type { get; set; }

        public string result { set; get; }
    }

有名字尺寸类型等属性

UploadWholeFile上传整个文件
 private void UploadWholeFile(HttpRequestBase request, List<ViewDataUploadFilesResult> statuses)
        {
            for (int i = 0; i < request.Files.Count; i++)
            {
                string result = ISValid(request.Files[i], "image");
                if (result!= "OK")
                {
                    statuses.Add(new ViewDataUploadFilesResult() { result=result});
                }
            }
            if (statuses.Count > 0) return;
            for (int i = 0; i < request.Files.Count; i++)
            {
                var file = request.Files[i];
               
                if (!Directory.Exists(StorageRoot))
                {
                    Directory.CreateDirectory(StorageRoot);
                }
                string fileExt = Path.GetExtension(file.FileName).ToLower();
                string newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
                var fullPath = Path.Combine(StorageRoot, newFileName);

                file.SaveAs(fullPath);

                statuses.Add(new ViewDataUploadFilesResult()
                {
                    result = "OK",
                    name = newFileName,
                    size = file.ContentLength,
                    type = file.ContentType,
                    url = Path.Combine(path, Path.GetFileName(newFileName)),
                    delete_url = "/Home/Delete/" + newFileName,
                    thumbnail_url = @"data:image/png;base64," + EncodeFile(fullPath),
                    delete_type = "GET",
                });
            }
        }
 private void UploadPartialFile(string fileName, HttpRequestBase request, List<ViewDataUploadFilesResult> statuses)
        {
            if (request.Files.Count != 1) throw new HttpRequestValidationException("Attempt to upload chunked file containing more than one fragment per request");
            var file = request.Files[0];
            string result = ISValid(file, "image");
            if (result != "OK")
            {
                statuses.Add(new ViewDataUploadFilesResult() { result = result });
            }
            if (statuses.Count > 0) return;
            var inputStream = file.InputStream;
            if (!Directory.Exists(StorageRoot))
            {
                Directory.CreateDirectory(StorageRoot);
            }
            string fileExt = Path.GetExtension(file.FileName).ToLower();
            string newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
            var fullName = Path.Combine(StorageRoot, newFileName);

            using (var fs = new FileStream(fullName, FileMode.Append, FileAccess.Write))
            {
                var buffer = new byte[1024];

                var l = inputStream.Read(buffer, 0, 1024);
                while (l > 0)
                {
                    fs.Write(buffer, 0, l);
                    l = inputStream.Read(buffer, 0, 1024);
                }
                fs.Flush();
                fs.Close();
            }
            statuses.Add(new ViewDataUploadFilesResult()
            {
                result="OK",
                name = newFileName,
                size = file.ContentLength,
                type = file.ContentType,
                url = Path.Combine(path, Path.GetFileName(newFileName)),
                delete_url = "/Home/Delete/" + newFileName,
                thumbnail_url = @"data:image/png;base64," + EncodeFile(fullName),
                delete_type = "GET",
            });
        }

上传部分文件

private string ISValid(HttpPostedFileBase file,string dirName)
        {           
            //定义允许上传的文件扩展名
            Hashtable extTable = new Hashtable();
            extTable.Add("image", "gif,jpg,jpeg,png,bmp");
            extTable.Add("flash", "swf,flv");
            extTable.Add("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
            extTable.Add("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");

            //最大文件大小
            int maxSize = 1000000;
            String fileName = file.FileName;
            String fileExt = Path.GetExtension(fileName).ToLower();

            if (file.InputStream == null || file.InputStream.Length > maxSize)
            {
                return "上传文件大小超过限制。";
            }

            if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(((String)extTable[dirName]).Split(','), fileExt.Substring(1).ToLower()) == -1)
            {
                return "上传文件扩展名是不允许的扩展名。
只允许" + ((String)extTable[dirName]) + "格式。";
            }
            return "OK";
        }

isvalid验证上传文件是否合理

 private string EncodeFile(string fileName)
        {
            return Convert.ToBase64String(System.IO.File.ReadAllBytes(fileName));
        }
 [HttpGet]
        public void Delete(string id)
        {
            var filename = id;
            var filePath = Path.Combine(Server.MapPath("~/Files"), filename);

            if (System.IO.File.Exists(filePath))
            {
                System.IO.File.Delete(filePath);
            }
        }
 
原文地址:https://www.cnblogs.com/jiangyou-lz/p/5707542.html