一、 使用默认方法上传文件:

1、Action:

  1. /// <summary>
  2. /// 上传文件 使用上传后的默认文件名称
  3. /// 默认名称是BodyPart_XXXXXX,BodyPart_加Guid码
  4. /// </summary>
  5. /// <returns></returns>
  6. [HttpPost, Route("Upload")]
  7. public async Task<string> Upload()
  8. {
  9. try
  10. {
  11. //web api 获取项目根目录下指定的文件下
  12. var root = System.Web.Hosting.HostingEnvironment.MapPath("/Resource/Images");
  13. var provider = new MultipartFormDataStreamProvider(root);
  14.  
  15. //文件已经上传 但是文件没有后缀名 需要给文件添加后缀名
  16. await Request.Content.ReadAsMultipartAsync(provider);
  17.  
  18. foreach (var file in provider.FileData)
  19. {
  20. //这里获取含有双引号'" '
  21. string filename = file.Headers.ContentDisposition.FileName.Trim('"');
  22. //获取对应文件后缀名
  23. string fileExt = filename.Substring(filename.LastIndexOf('.'));
  24.  
  25. FileInfo fileinfo = new FileInfo(file.LocalFileName);
  26. //fileinfo.Name 上传后的文件路径 此处不含后缀名
  27. //修改文件名 添加后缀名
  28. string newFilename = fileinfo.Name + fileExt;
  29. //最后保存文件路径
  30. string saveUrl = Path.Combine(root, newFilename);
  31. fileinfo.MoveTo(saveUrl);
  32. }
  33. return "success";
  34. }
  35. catch (Exception ex)
  36. {
  37. throw ex;
  38. }
  39. }

2、html模拟代码:

  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5. <title></title>
  6. </head>
  7. <body>
  8. <h1>柠檬伙伴云</h1>
  9. <form action="/Test/Upload" method="post" enctype="multipart/form-data">
  10.  
  11. <input type="file" name="f1" /> <br /><br />
  12. <input type="file" name="f2" /> <br /><br />
  13.  
  14. <input type="submit" value="上传图片" />
  15.  
  16. </form>
  17. </body>
  18. </html>

3、效果如下图:

上图就是上传后文件没有后缀名效果

对第一张没有后缀名添加后缀名的效果

二、修改上传文件后缀名

1、action:

  1. /// <summary>
  2. /// 上传文件 修改上传文件名称 也不包含后缀名
  3. /// </summary>
  4. /// <returns></returns>
  5. [HttpPost, Route("Upload2")]
  6. public async Task<string> Upload2()
  7. {
  8. try
  9. {
  10. //web api 获取项目根目录下指定的文件下
  11. var root = System.Web.Hosting.HostingEnvironment.MapPath("/Resource/Images");
  12. //对上传文件重新命名 根据需求对应修改文件名称 不包含后缀名 只是前缀名
  13. var provider = new RenamingMultipartFormDataStreamProvider(root);
  14.  
  15. //文件已经上传 但是文件没有后缀名 需要给文件添加后缀名
  16. await Request.Content.ReadAsMultipartAsync(provider);
  17.  
  18. foreach (var file in provider.FileData)
  19. {
  20. //这里获取含有双引号'" '
  21. string filename = file.Headers.ContentDisposition.FileName.Trim('"');
  22. //获取对应文件后缀名
  23. string fileExt = filename.Substring(filename.LastIndexOf('.'));
  24.  
  25. FileInfo fileinfo = new FileInfo(file.LocalFileName);
  26. //fileinfo.Name 上传后的文件路径 此处不含后缀名
  27. //修改文件名 添加后缀名
  28. string newFilename = fileinfo.Name + fileExt;
  29. //最后保存文件路径
  30. string saveUrl = Path.Combine(root, newFilename);
  31. fileinfo.MoveTo(saveUrl);
  32. }
  33. return "success";
  34. }
  35. catch (Exception ex)
  36. {
  37. throw ex;
  38. }
  39. }

2、RenamingMultipartFormDataStreamProvider 类:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net.Http;
  7. using System.Net.Http.Headers;
  8. using System.IO;
  9.  
  10. namespace Test.One.Common
  11. {
  12. public class RenamingMultipartFormDataStreamProvider : MultipartFormDataStreamProvider
  13. {
  14. /// <summary>
  15. /// 文件重命名
  16. /// </summary>
  17. /// <param name="root"></param>
  18. public RenamingMultipartFormDataStreamProvider(string root)
  19. : base(root)
  20. {
  21. }
  22. /// <summary>
  23. /// 文件重命名
  24. /// </summary>
  25. /// <param name="headers"></param>
  26. /// <returns></returns>
  27. public override string GetLocalFileName(HttpContentHeaders headers)
  28. {
  29. string fileName = headers.ContentDisposition.Name;
  30. if (!string.IsNullOrWhiteSpace(fileName))
  31. {
  32. fileName = Guid.NewGuid().ToString();
  33. }
  34. return fileName.Replace("\"", string.Empty);
  35. }
  36. }
  37. }

3、html 模拟代码:

  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5. <title></title>
  6. </head>
  7. <body>
  8. <h1>柠檬伙伴云</h1>
  9. <form action="/Test/Upload2" method="post" enctype="multipart/form-data">
  10.  
  11. <input type="file" name="f1" /> <br /><br />
  12. <input type="file" name="f2" /> <br /><br />
  13.  
  14. <input type="submit" value="上传图片" />
  15.  
  16. </form>
  17. </body>
  18. </html>

3、效果:

实例二:

api:

  1. /// <summary>
  2. /// TestFile
  3. /// </summary>
  4. /// <returns></returns>
  5. [HttpPost,Route("TestFile")]
  6. public async Task<Result<bool>> TestFile()
  7. {
  8. Result<bool> result = new Result<bool>();
  9. try
  10. {
  11. if (!Request.Content.IsMimeMultipartContent())
  12. {
  13. result.ReturnCode = ResultCode.InvalidParam;
  14. result.Data = false;
  15. result.ReturnMsg = "请求数据不是multipart/form-data类型";
  16. return result;
  17. }
  18.  
  19. string root = HostingEnvironment.MapPath("/Resources/Templet/");
  20. string date = DateTime.Now.ToString("yyyy-MM-dd");
  21. string resourcePath = Path.Combine(root, date);
  22. if (!Directory.Exists(resourcePath))
  23. {
  24. Directory.CreateDirectory(resourcePath);
  25. }
  26.  
  27. var provider = new RenamingMultipartFormDataStreamProvider(resourcePath);
  28. // 接收数据,并保存文件
  29. var bodyparts = await Request.Content.ReadAsMultipartAsync(provider);
  30.  
  31. if (bodyparts.FormData.Count <= || provider.FileData == null && !provider.FileData.Any())
  32. {
  33. result.ReturnCode = ResultCode.InvalidParam;
  34. result.Data = false;
  35. result.ReturnMsg = "文件或参数不全,视频上传失败。";
  36. return result;
  37. }
  38.  
  39. UploadContactListFileModel uploadModel = new UploadContactListFileModel();
  40.  
  41. if (bodyparts.FormData.AllKeys.Contains("ContactListName"))
  42. {
  43. uploadModel.ContactListName = bodyparts.FormData["ContactListName"];
  44. }
  45.  
  46. foreach (MultipartFileData file in provider.FileData)
  47. {
  48. //上传的文件名
  49. string name = file.Headers.ContentDisposition.FileName.Replace("\"", "");
  50. string extension = Path.GetExtension(name);
  51. if (extension == ".csv" || extension == ".xls" || extension == ".xlsx")
  52. {
  53. //修改文件名
  54. string newFileName = Guid.NewGuid().ToString("N") + Path.GetExtension(name);
  55. string uploadPath = Path.Combine(resourcePath, newFileName);
  56. //保存文件
  57. File.Move(file.LocalFileName, uploadPath);
  58. uploadModel.FilePath = uploadPath;
  59. break;
  60. }
  61. }
  62. }
  63. catch (Exception ex)
  64. {
  65. result.ReturnMsg = "服务器内部发生异常";
  66. Logger.Error("SelfsController[AddVideos]", ex);
  67. }
  68. return result;
  69. }

model:

  1. public class UploadContactListFileModel
  2. {
  3.  
  4. /// <summary>
  5. /// FilePath
  6. /// </summary>
  7. public string FilePath { get; set; }
  8.  
  9. /// <summary>
  10. /// ContactListName
  11. /// </summary>
  12. public string ContactListName { get; set; }
  13.  
  14. /// <summary>
  15. /// IsError
  16. /// </summary>
  17. /// <returns></returns>
  18. public bool IsError()
  19. {
  20. return string.IsNullOrEmpty(FilePath) || string.IsNullOrEmpty(ContactListName);
  21. }
  22. }

html:

  1. <form action="/Spread/External/TestFile" method="post" enctype="multipart/form-data">
  2. <input type="text" name="ContactListName" value="ContactListName" /> <br />
  3. <input type="file" name="upload" value="" /><br />
  4. <input type="submit" name="name" value="上传" />
  5. </form>

C# Web Api 上传文件的更多相关文章

  1. 演示如何通过 web api 上传文件MVC40

    演示如何通过 web api 上传文件WebApiWebFormHost/UploadFileController.cs /* * 通过 web api 上传文件 */ using System; u ...

  2. 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

    原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...

  3. 前端AngularJS后端ASP.NET Web API上传文件

    本篇体验使用AngularJS向后端ASP.NET API控制器上传文件.    首先服务端: public class FilesController : ApiController { //usi ...

  4. 1.5 WEB API 上传文件

    1.前提,设置跨域 2.在控制器头添加允许跨域 /// <summary> /// 文件管理口控制器 /// </summary> [EnableCors("*&qu ...

  5. HttpClient 测试web API上传文件实例

    1.使用HttpClient 测试上传文件并且设置header信息: using Lemon.Common; using Newtonsoft.Json; using System; using Sy ...

  6. ASP.NET Web API 上传文件

    HTML表单: <form id="form1" method="post" enctype="multipart/form-data" ...

  7. 数据採集之Web端上传文件到Hadoop HDFS

    前言 近期在公司接到一个任务.是关于数据採集方面的. 需求主要有3个: 通过web端上传文件到HDFS; 通过日志採集的方式导入到HDFS; 将数据库DB的表数据导入到HDFS. 正好近期都有在这方面 ...

  8. php 下 html5 XHR2 + FormData + File API 上传文件

    FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormD ...

  9. Web API 上传下载文件

    1.引用了一个第三方组件 ICSharpCode.SharpZipLib.Zip; 2.具体代码 实体类,可以用hashtable 替代 ,感觉hashtable 比较灵活 public class ...

随机推荐

  1. sitemesh2在tomcat和weblogic中同时使用的配置问题

    (一)拦截*.do,装饰器中匹配do tomcat 可行 weblogic 不可行 web.xml ~~~ <filter> <filter-name>sitemesh< ...

  2. Haskell 与范畴论

    说到 Haskell,这真是一门逼格极高的编程语言,一般初学者如果没有相关函数式编程的经验,入门直接接触那些稀奇古怪的概念,简直要跪下.现在回想起来,隐隐觉得初学者所拥有的命令式编程语言(impera ...

  3. Oracle---.oracle函数

    数值型函数: 绝对值: ABS(x) [功能]返回x的绝对值 [参数]x,数字型表达式 [返回]数字 [示例] select abs(100),abs(-100) from dual;-------- ...

  4. 网络拥塞控制与NS2仿真

    准备工作: 1. 安装virtual box 虚拟机,并安装虚拟机增强功能,并配制共享文件夹. 共享文件夹自动挂载后的路径为/media/sf_xxx文件夹,xxx为所起的文件名. 解决virtual ...

  5. cocos2d-x开发: 场景实体(entity)管理

    公司现在开新项目,主题的框架部分都是我自己在做,不用受到别人的牵制,所以还算是比较的自由,很好发挥. 游戏并不大,所以需要用到的地方并不多.今天花了一些时间写了场景entity管理的部分代码,还没有完 ...

  6. bootstrap插件学习-bootstrap.carousel.js

    先看bootstrap.carousel.js的结构 var Carousel = function (element, options){} //构造器 Carousel.prototype = { ...

  7. MongoDB入门二:基本概念

    前言 工欲善其事必先利其器.在学习MongoDB之前,需要对MongoDB的一些基本概念有系统的了解. 所以,本篇文章主要介绍MongoDB的一些基本概念,这些概念的定义均来自<MongoDB权 ...

  8. Hadoop第1~2周练习—Hadoop1.X和2.X安装

        练习题目     Hadoop1.X安装 2.1    准备工作 2.1.1   硬软件环境 2.1.2   集群网络环境 2.1.3   安装使用工具 2.2  环境搭建 2.2.1   安 ...

  9. Linux - 获取Shell命令帮助信息

    Manual Page Chapter List 1:所有用户可以操作的指令或可执行文件 2:系统核心调用的函数与工具 3:子调用,常用的函数与函数库 4:设备,硬件文件说明,通常是/dev/的文件 ...

  10. 推荐几款很棒的 JavaScript 表单美化和验证插件

    表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ...