zoukankan      html  css  js  c++  java
  • .net mvc web api上传图片/文件并重命名

    #region 上传图片
    /// <summary>
    /// 上传图片到服务器 当error为0时成功,为1时失败 并从errmsg获取消息
    /// </summary>
    /// <returns></returns>
    public Task<Hashtable> post()
    {
    String PhoneId = null;

    // 检查是否是 multipart/form-data
    if (!Request.Content.IsMimeMultipartContent("form-data"))
    throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    //文件保存目录路径
    //string SaveTempPath = "~/App_Data/";
    //System.String dirTempPath = HttpContext.Current.Server.MapPath(SaveTempPath);
    System.String dirTempPath = @"C:picture";
    // 设置上传目录
    var provider = new MultipartFormDataStreamProvider(dirTempPath);
    //var queryp = Request.GetQueryNameValuePairs();//获得查询字符串的键值集合

    //接受数据并保存文件
    var task = Request.Content.ReadAsMultipartAsync(provider).
    ContinueWith<System.Collections.Hashtable>(o =>
    {
    Hashtable hash = new Hashtable();


    hash["error"] = 1;
    hash["errmsg"] = "上传出错";
    var file = provider.FileData[0];//provider.FormData

    string orfilename = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"');
    FileInfo fileinfo = new FileInfo(file.LocalFileName);
    //判断拿到的PhoneId
    PhoneId = provider.FormData["PhoneId"];

    if (string.IsNullOrEmpty(PhoneId.Trim()) || PhoneId.Trim().Length == 0)
    {
    hash["error"] = 1;
    hash["errmsg"] = "未上传PhoneId";
    fileinfo.Delete(); //如果不写这句你会发现 返回的数据是正常的 但文件依旧会Down下来
    return hash;
    }
    //最大文件大小
    int maxSize = 10000000;
    if (fileinfo.Length <= 0)
    {
    hash["error"] = 1;
    hash["errmsg"] = "请选择上传文件。";
    fileinfo.Delete();
    return hash;
    }
    else if (fileinfo.Length > maxSize)
    {
    hash["error"] = 1;
    hash["errmsg"] = "上传文件大小超过限制。";
    fileinfo.Delete();
    return hash;
    }
    else
    {
    string fileExt = orfilename.Substring(orfilename.LastIndexOf('.'));
    //定义允许上传的文件扩展名
    String fileTypes = "gif,jpg,jpeg,png,bmp";
    if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(fileTypes.Split(','), fileExt.Substring(1).ToLower()) == -1)
    {
    hash["error"] = 1;
    hash["errmsg"] = "上传文件扩展名是不允许的扩展名。";
    fileinfo.Delete();
    return hash;
    }
    else
    {
    string path = @"picture" + PhoneId + ".jpg";
    try
    {
    if (modelusers.updatePicture(PhoneId, path) != 1)
    {
    hash["error"] = 1;
    hash["errmsg"] = "更新数据库失败";
    fileinfo.Delete();
    return hash;
    }


    }
    catch (Exception ex)
    {
    hash["error"] = 1;
    hash["errmsg"] = "更新数据库失败2";
    fileinfo.Delete();
    return hash;

    }
    String ymd = DateTime.Now.ToString("yyyyMMdd", System.Globalization.DateTimeFormatInfo.InvariantInfo);
    //String newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", System.Globalization.DateTimeFormatInfo.InvariantInfo);
    String newFileName = PhoneId;
    fileinfo.CopyTo(Path.Combine(dirTempPath, newFileName + fileExt), true);
    fileinfo.Delete();


    hash["error"] = 0;
    hash["errmsg"] = "上传成功";
    }
    }
    return hash;
    });

    return task;
    }
    #endregion
    值得注意的几点:
    - 当上传成功时,error值为0。失败时,error为1并从errmsg中获取失败消息。
    - 在文件路径处偷了个懒直接把文件的路径塞上去了,如果是从当前路径下放文件的话,请遵循注释。
    - PhoneId = provider.FormData[“PhoneId”];这句拿到你应该上传的文件名,根据你的需求修改
    - 如果不进行重新命名的话,文件会有默认命名值,并且没有后缀名。这是因为MVC4.0 WebAPI上传后的图片默认以字符串bodypart结合Guid来命名,且没有文件后缀
    - fileinfo.Delete();如果不写这句你会发现 返回的数据是失败的 但文件依旧会Down下来 这是因为文件在一开始执行的时候就已经保存下来了,所以在失败后你应该将他删除。

    接下来是我自己写的简单测试代码,各位再写完接口时要自己多测试测试,塞一些异常数据进去,看看是否能够正常运行,不要等到后期出问题了再反过头去修改。

    <html>

    <form action="这里写接口url" method="post" enctype="multipart/form-data">

    <input type="file" name="file">

    <hr>
    <input type="text" name="PhoneId" id="PhoneId">
    <hr>
    <input type="submit" value="submit" id="btnPutUserInfo">


    </form>
    </html>
    ---------------------
    作者:Morning-Wind
    来源:CSDN
    原文:https://blog.csdn.net/zch501157081/article/details/51540854
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    局部特征点检测 (Local Point Detector)
    算法
    64位编程
    QT开发之mock原理
    C#实现全角字符和半角字符转换
    QTableWidget基本功能总结(转)
    非const引用不能绑定非左值(nolvalue) .
    QTableWidget 应用总结
    QString和string类型相互转换(转)
    XML解析中文字符
  • 原文地址:https://www.cnblogs.com/ztf20/p/10083323.html
Copyright © 2011-2022 走看看