zoukankan      html  css  js  c++  java
  • .net webapi 接收上传图片

    protected async Task<ResponseResult<(Dictionary<string,string> paths,T value)>> UploadFile<T>()
            {
                ResponseResult<(Dictionary<string, string> paths, T entity)> response = new ResponseResult<(Dictionary<string, string> paths, T entity)>();
                Dictionary<string, string> filePaths = new Dictionary<string, string>();
    
                try
                {
                    // 是否请求包含multipart/form-data。
                    if (!Request.Content.IsMimeMultipartContent())
                    {
                        response.Code = WebErrorCode.Failure.GetHashCode();
                        response.Message = "格式错误,请使用multipart/form-data上传";
                        return response;
                    }
    
                    string root = System.Web.Hosting.HostingEnvironment.MapPath("/UploadFiles/");
    
                    if (!Directory.Exists(FileSavePath))
                    {
                        Directory.CreateDirectory(FileSavePath);
                    }
    
                    var provider = new MultipartFormDataStreamProvider(root);
    
                    // 阅读表格数据并返回一个异步任务.
                    await Request.Content.ReadAsMultipartAsync(provider);
    
                    // 文件
                    foreach (var file in provider.FileData)
                    {
                        string uploadFileName = file.Headers.ContentDisposition.Name.TrimStart('"').TrimEnd('"');
                        string orfilename = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"');
                        FileInfo fileinfo = new FileInfo(file.LocalFileName);
                        
                        if (fileinfo.Length <= 0)
                        {
                            continue;
                        }
                       
                        string fileExt = orfilename.Substring(orfilename.LastIndexOf('.'));
                        
                        // 文件保存到指定地址
                        fileinfo.CopyTo(Path.Combine(FileSavePath, fileinfo.Name + fileExt), true);
    
                        // web路径
                        string path = FileWebPath + fileinfo.Name + fileExt;
    
                        if (!filePaths.ContainsKey(file.LocalFileName))
                        {
                            filePaths.Add(uploadFileName, path);
                        }
    
                        fileinfo.Delete();//删除原文件
                    }
    
                    // 表单数据 
                    // 1、仅处理json字符串反序列化以及指定类型转换
                    // 2、仅对第一个key的第一个值进行处理
                    string[] keys = provider.FormData.AllKeys;
    
                    string value = string.Empty;
    
                    T t = default(T);
    
                    if (keys.Length > 0)
                    {
                        string[] values = provider.FormData.GetValues(keys[0]);
    
                        if(values.Length > 0)
                        {
                            value = values[0];
    
                            if (Type.GetTypeCode(typeof(T)) == TypeCode.Object)
                            {
                                t = JsonConvert.DeserializeObject<T>(value);
                            }
                            else
                            {
                                t = ChangeTo<T>(value);
                            }
                        }
                    }
    
                    response.Code = WebErrorCode.Success.GetHashCode();
                    response.Data = (filePaths, t);
                    return response;
                }
                catch (Exception ex)
                {
                    Logging.Logger.Error(ex);
                    response.Code = WebErrorCode.SystemError.GetHashCode();
                    return response;
                }
            }
    
            private T ChangeTo<T>(string str)
            {
                T result = default(T);
                result = (T)Convert.ChangeType(str, typeof(T));
                return result;
            }
    

      使用

    [HttpPost]
            [AllowAnonymous]
            public async Task<ResponseResult<object>> UploadTest()
            {
                ResponseResult<object> response = new ResponseResult<object>();
    
                try
                {
                    /*
                     * 上传格式:
                     * {
                     *      "file1": file, // 文件1
                     *      "file2": file, // 文件2
                     *      ……
                     *      "name": json   // 表单数据,json字符串/字符串
                     * }
                     * 
                     * 表单数据需要解析为对象时,上传“json字符串”
                     * 表单数据仅仅上传ID,Code等唯一数据时,上传“字符串”数据
                     */
    
                    //var result = await UploadFile<UserInfo>();
                    //UserInfo user = result.Data.value ?? new UserInfo();
    
                    var result = await UploadFile<int>();
    
                    int test = result.Data.value;
    
                    Dictionary<string, string> paths = result.Data.paths;
    
                    response.Data = new { 
                    paths,
                    test
                    };
    
                    return response;
                }
                catch (Exception ex)
                {
                    Logging.Logger.Error(ex);
                    return response;
                }
            }
    

      

    岁月无情催人老,请珍爱生命,远离代码!!!
  • 相关阅读:
    jsp mysql 配置线程池
    服务端 模拟 检测 攻击。。乱写
    硕思闪客精灵 7.2 破解版
    unity UnityAwe 插件
    smartfoxserver 2x 解决 Math NAN
    unity 断点下载
    java 监听文件目录修改
    wind7 64 setup appjs
    sfs2x 修改jvm 内存
    unity ngui 解决图层问题
  • 原文地址:https://www.cnblogs.com/zhoushangwu/p/15407446.html
Copyright © 2011-2022 走看看