• 另一种图片上传 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);
                }
            }
     
  • 相关阅读:
    【第五周读书笔记】我是一只IT小小鸟
    【第三周读书笔记】浅谈node.js中的异步回调和用jsxlsx操作Excel表格
    【第四周读书笔记】读构建之法第11到第16章
    【第一次个人作业】一条咸鱼的词频统计
    win10连接无线网,开启移动热点,手机连接它手机一直显示获取ip地址中。
    每月一次,免费领取小米云服务会员
    Spring Day 1
    oracle闪回查询和闪回数据库
    oracle异库同表名的两个数据库中数据合并或数据表结构的修改
    oracle使用SQL来生成SQL
  • 原文地址:https://www.cnblogs.com/jiangyou-lz/p/5707542.html
Copyright © 2020-2023  润新知