十年河东,十年河西,莫欺少年穷

学无止境,精益求精

代码篇,不多说

如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Net.Http;
  8. using System.Threading.Tasks;
  9. using System.Web.Http;
  10.  
  11. namespace FileUp.Controllers
  12. {
  13. public class FileController : ApiController
  14. {
  15. [HttpPost]
  16. public async Task<string> UploadFileStream()
  17. {
  18. string returns = string.Empty;
  19. string fileType = "ss";//要创建的子文件夹的名字
  20. var uploadPath = "~/upload";
  21. string filePath = System.Web.HttpContext.Current.Server.MapPath(uploadPath + "/" + fileType + "/");//绝对路径
  22. //string filePath = uploadPath + "\\" + fileType + "\\"; //E:\Fileup 居家
  23. if (Directory.Exists(filePath) == false)
  24. {
  25. Directory.CreateDirectory(filePath);
  26. }
  27.  
  28. try
  29. {
  30. var provider = new ReNameMultipartFormDataStreamProvider(filePath);
  31.  
  32. await Request.Content.ReadAsMultipartAsync(provider).ContinueWith(o =>
  33. {
  34.  
  35. foreach (var file in provider.FileData)
  36. {
  37. string orfilename = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"');//待上传的文件名
  38. FileInfo fileinfo = new FileInfo(file.LocalFileName);
  39. //判断开始
  40. int maxSize = ;
  41. string oldName = orfilename;//选择的文件的名称
  42. if (fileinfo.Length <= )
  43. {
  44. //文件大小判断 未选择上传的图片 大小为零
  45. }
  46. else if (fileinfo.Length > maxSize)
  47. {
  48. //文件大小判断 上传文件是否超限制
  49. }
  50. else
  51. {
  52. //
  53. string fileExt = orfilename.Substring(orfilename.LastIndexOf('.'));
  54. string Extension = fileExt;
  55. string CreateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
  56.  
  57. //定义允许上传的文件扩展名
  58. String fileTypes = "gif,jpg,jpeg,png,bmp";
  59. if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(fileTypes.Split(','), fileExt.Substring().ToLower()) == -)
  60. {
  61.  
  62. returns = "上传的文件格式不是图片";
  63. }
  64. else
  65. {
  66. returns = string.Format(@"/Uploads/{0}/{1}", fileType, System.IO.Path.GetFileName(file.LocalFileName));
  67. }
  68. }
  69. }
  70. });
  71. }
  72. catch (Exception ex)
  73. {
  74. returns = ex.ToString();
  75. }
  76. return returns;
  77. }
  78.  
  79. /// <summary>
  80. /// 重命名上传的文件
  81. /// </summary>
  82. public class ReNameMultipartFormDataStreamProvider : MultipartFormDataStreamProvider
  83. {
  84. public ReNameMultipartFormDataStreamProvider(string root)
  85. : base(root)
  86. { }
  87.  
  88. public override string GetLocalFileName(System.Net.Http.Headers.HttpContentHeaders headers)
  89. {
  90.  
  91. string extension = !string.IsNullOrWhiteSpace(headers.ContentDisposition.FileName) ? Path.GetExtension(GetValidFileName(headers.ContentDisposition.FileName)) : "";
  92. return Guid.NewGuid().ToString().Replace("-", "") + extension;
  93. }
  94.  
  95. private string GetValidFileName(string filePath)
  96. {
  97. char[] invalids = System.IO.Path.GetInvalidFileNameChars();
  98. return String.Join("_", filePath.Split(invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd('.');
  99. }
  100.  
  101. }
  102. }
  103. }

PostMan请求如下:

@陈卧龙的博客

C# webApi上传图片 代码篇的更多相关文章

  1. WebApi上传图片 await关键字

    await关键字对于方法执行的影响 将上一篇WebApi上传图片中代码修改(使用了await关键字)如下: [HttpPost] public async Task<string> Pos ...

  2. kindeditor扩展粘贴图片功能&修改图片上传路径并通过webapi上传图片到图片服务器

    前言 kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. 本篇博文需要解决的问题有两个: kindeditor扩展粘贴图片功 ...

  3. kindeditor扩展粘贴截图功能&修改图片上传路径并通过webapi上传图片到图片服务器

    前言 kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. 本篇博文需要解决的问题有两个: kindeditor扩展粘贴图片功 ...

  4. kindeditor修改图片上传路径-使用webapi上传图片到图片服务器

    kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 在这里我着重介绍一些使用kindeditor修改图片上传路径并通过webapi上传图片到图片服务器的方案. 因为我使用的 ...

  5. TODO:一不顺眼就换字体Go之代码篇

    TODO:一不顺眼就换字体Go之代码篇 image包实现了一个基本的2D图像库,该包中包含基本的接口叫做image,这个里面包含color,这个将在image/color中描述:新增字体font,进行 ...

  6. Netty实现高性能IOT服务器(Groza)之精尽代码篇中

    运行环境: JDK 8+ Maven 3.0+ Redis 技术栈: SpringBoot 2.0+ Redis (Lettuce客户端,RedisTemplate模板方法) Netty 4.1+ M ...

  7. Asp.Net WebApi上传图片

    webapi using System; using System.Collections; using System.Collections.Generic; using System.Diagno ...

  8. 零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)

    好,现在进入高阶代码篇. 目的: 爬取昆明市中学的兴趣点POI. 关键词:中学 已有ak:9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 昆明市坐标范围: 左下角:24.390894 ...

  9. 平衡二叉树,AVL树之代码篇

    看完了第一篇博客,相信大家对于平衡二叉树的插入调整以及删除调整已经有了一定的了解,下面,我们开始介绍代码部分. 首先,再次提一下使用的结构定义 typedef char KeyType; //关键字 ...

随机推荐

  1. 安卓开发之ScrollView

    当界面不足以将所有的内容显示出来的时候便导致下面的部分内容无法显示出来 所有加上ScrollView 来讲要显示的内容放入之中便可以实现上下滚动界面内容 但是当要显示多个控件的时候会出错  原因是Sc ...

  2. Login case

    第一步:画UI,代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  3. linux上用newman+postman进行自动化测试

    第一步:导出postman文件 Postman就是根据collection和enviroment这两个json文件来自动化运行的! 所以从Postman中导出collection和enviroment ...

  4. (后台)Java:对double值进行四舍五入,保留两位小数的几种方法

    mport java.text.DecimalFormat; DecimalFormat df = new DecimalFormat("######0.00"); double ...

  5. drupal 2006 mysql server has gone away

    在开发一个cms drupal网站时遇到了如上图的错误,几经百度谷歌,都一致说需要修改mysql的配置 max_allowed_packet参数,但是由于我买的是虚拟主机,并没有权限修改. 本来已经放 ...

  6. 【PAT】B1002 写出这个数

    思路: 1.以字符串形式输入数据,计算结果 2.使用sprintf将结果数字转换为字符串(将数字每一位分开) 3.分别输出字符每一位 1,笨方法,用的ifelse来判断输出 #include<s ...

  7. MDX 脚本语句 -- Scope

    在多维表达式 (MDX) 中,下列语句用于管理 MDX 脚本中的上下文.作用域和流控制. 主题 说明 calculate语句 计算子多维数据集,还可以确定子多维数据集中所包含的求解次序 case语句 ...

  8. 17秋 软件工程 团队第五次作业 Alpha Scrum3

    17秋 软件工程 团队第五次作业 Alpha Scrum3 今日完成的任务 杰麟:java后端学习: 世强:Android的部门基础信息模块的信息显示和对接后台: 港晨:后台管理登陆界面ui设计: 树 ...

  9. 点击事件click和onclick的区别

    一句话:$(selector).click()事件只能绑定静态元素.$(selector).on('click',function(){ })支持动态绑定元素. 如果是动态生成的元素,绑定事件只能用o ...

  10. Linux基础第五课——用户管理

    用户管理 一个用户必须有一个主组 一个用户可以拥有多个组 但是必须一个主组 其它组是临时组 一个组可以拥有多个用户 用户的信息放到 /etc/passwd 用户的密码 存入 /etc/shadow 组 ...