C# Web Api 上传文件
一、 使用默认方法上传文件:
1、Action:
- /// <summary>
- /// 上传文件 使用上传后的默认文件名称
- /// 默认名称是BodyPart_XXXXXX,BodyPart_加Guid码
- /// </summary>
- /// <returns></returns>
- [HttpPost, Route("Upload")]
- public async Task<string> Upload()
- {
- try
- {
- //web api 获取项目根目录下指定的文件下
- var root = System.Web.Hosting.HostingEnvironment.MapPath("/Resource/Images");
- var provider = new MultipartFormDataStreamProvider(root);
- //文件已经上传 但是文件没有后缀名 需要给文件添加后缀名
- await Request.Content.ReadAsMultipartAsync(provider);
- foreach (var file in provider.FileData)
- {
- //这里获取含有双引号'" '
- string filename = file.Headers.ContentDisposition.FileName.Trim('"');
- //获取对应文件后缀名
- string fileExt = filename.Substring(filename.LastIndexOf('.'));
- FileInfo fileinfo = new FileInfo(file.LocalFileName);
- //fileinfo.Name 上传后的文件路径 此处不含后缀名
- //修改文件名 添加后缀名
- string newFilename = fileinfo.Name + fileExt;
- //最后保存文件路径
- string saveUrl = Path.Combine(root, newFilename);
- fileinfo.MoveTo(saveUrl);
- }
- return "success";
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
2、html模拟代码:
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <title></title>
- </head>
- <body>
- <h1>柠檬伙伴云</h1>
- <form action="/Test/Upload" method="post" enctype="multipart/form-data">
- <input type="file" name="f1" /> <br /><br />
- <input type="file" name="f2" /> <br /><br />
- <input type="submit" value="上传图片" />
- </form>
- </body>
- </html>
3、效果如下图:
上图就是上传后文件没有后缀名效果
对第一张没有后缀名添加后缀名的效果
二、修改上传文件后缀名
1、action:
- /// <summary>
- /// 上传文件 修改上传文件名称 也不包含后缀名
- /// </summary>
- /// <returns></returns>
- [HttpPost, Route("Upload2")]
- public async Task<string> Upload2()
- {
- try
- {
- //web api 获取项目根目录下指定的文件下
- var root = System.Web.Hosting.HostingEnvironment.MapPath("/Resource/Images");
- //对上传文件重新命名 根据需求对应修改文件名称 不包含后缀名 只是前缀名
- var provider = new RenamingMultipartFormDataStreamProvider(root);
- //文件已经上传 但是文件没有后缀名 需要给文件添加后缀名
- await Request.Content.ReadAsMultipartAsync(provider);
- foreach (var file in provider.FileData)
- {
- //这里获取含有双引号'" '
- string filename = file.Headers.ContentDisposition.FileName.Trim('"');
- //获取对应文件后缀名
- string fileExt = filename.Substring(filename.LastIndexOf('.'));
- FileInfo fileinfo = new FileInfo(file.LocalFileName);
- //fileinfo.Name 上传后的文件路径 此处不含后缀名
- //修改文件名 添加后缀名
- string newFilename = fileinfo.Name + fileExt;
- //最后保存文件路径
- string saveUrl = Path.Combine(root, newFilename);
- fileinfo.MoveTo(saveUrl);
- }
- return "success";
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
2、RenamingMultipartFormDataStreamProvider 类:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Net.Http;
- using System.Net.Http.Headers;
- using System.IO;
- namespace Test.One.Common
- {
- public class RenamingMultipartFormDataStreamProvider : MultipartFormDataStreamProvider
- {
- /// <summary>
- /// 文件重命名
- /// </summary>
- /// <param name="root"></param>
- public RenamingMultipartFormDataStreamProvider(string root)
- : base(root)
- {
- }
- /// <summary>
- /// 文件重命名
- /// </summary>
- /// <param name="headers"></param>
- /// <returns></returns>
- public override string GetLocalFileName(HttpContentHeaders headers)
- {
- string fileName = headers.ContentDisposition.Name;
- if (!string.IsNullOrWhiteSpace(fileName))
- {
- fileName = Guid.NewGuid().ToString();
- }
- return fileName.Replace("\"", string.Empty);
- }
- }
- }
3、html 模拟代码:
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <title></title>
- </head>
- <body>
- <h1>柠檬伙伴云</h1>
- <form action="/Test/Upload2" method="post" enctype="multipart/form-data">
- <input type="file" name="f1" /> <br /><br />
- <input type="file" name="f2" /> <br /><br />
- <input type="submit" value="上传图片" />
- </form>
- </body>
- </html>
3、效果:
实例二:
api:
- /// <summary>
- /// TestFile
- /// </summary>
- /// <returns></returns>
- [HttpPost,Route("TestFile")]
- public async Task<Result<bool>> TestFile()
- {
- Result<bool> result = new Result<bool>();
- try
- {
- if (!Request.Content.IsMimeMultipartContent())
- {
- result.ReturnCode = ResultCode.InvalidParam;
- result.Data = false;
- result.ReturnMsg = "请求数据不是multipart/form-data类型";
- return result;
- }
- string root = HostingEnvironment.MapPath("/Resources/Templet/");
- string date = DateTime.Now.ToString("yyyy-MM-dd");
- string resourcePath = Path.Combine(root, date);
- if (!Directory.Exists(resourcePath))
- {
- Directory.CreateDirectory(resourcePath);
- }
- var provider = new RenamingMultipartFormDataStreamProvider(resourcePath);
- // 接收数据,并保存文件
- var bodyparts = await Request.Content.ReadAsMultipartAsync(provider);
- if (bodyparts.FormData.Count <= || provider.FileData == null && !provider.FileData.Any())
- {
- result.ReturnCode = ResultCode.InvalidParam;
- result.Data = false;
- result.ReturnMsg = "文件或参数不全,视频上传失败。";
- return result;
- }
- UploadContactListFileModel uploadModel = new UploadContactListFileModel();
- if (bodyparts.FormData.AllKeys.Contains("ContactListName"))
- {
- uploadModel.ContactListName = bodyparts.FormData["ContactListName"];
- }
- foreach (MultipartFileData file in provider.FileData)
- {
- //上传的文件名
- string name = file.Headers.ContentDisposition.FileName.Replace("\"", "");
- string extension = Path.GetExtension(name);
- if (extension == ".csv" || extension == ".xls" || extension == ".xlsx")
- {
- //修改文件名
- string newFileName = Guid.NewGuid().ToString("N") + Path.GetExtension(name);
- string uploadPath = Path.Combine(resourcePath, newFileName);
- //保存文件
- File.Move(file.LocalFileName, uploadPath);
- uploadModel.FilePath = uploadPath;
- break;
- }
- }
- }
- catch (Exception ex)
- {
- result.ReturnMsg = "服务器内部发生异常";
- Logger.Error("SelfsController[AddVideos]", ex);
- }
- return result;
- }
model:
- public class UploadContactListFileModel
- {
- /// <summary>
- /// FilePath
- /// </summary>
- public string FilePath { get; set; }
- /// <summary>
- /// ContactListName
- /// </summary>
- public string ContactListName { get; set; }
- /// <summary>
- /// IsError
- /// </summary>
- /// <returns></returns>
- public bool IsError()
- {
- return string.IsNullOrEmpty(FilePath) || string.IsNullOrEmpty(ContactListName);
- }
- }
html:
- <form action="/Spread/External/TestFile" method="post" enctype="multipart/form-data">
- <input type="text" name="ContactListName" value="ContactListName" /> <br />
- <input type="file" name="upload" value="" /><br />
- <input type="submit" name="name" value="上传" />
- </form>
C# Web Api 上传文件的更多相关文章
- 演示如何通过 web api 上传文件MVC40
演示如何通过 web api 上传文件WebApiWebFormHost/UploadFileController.cs /* * 通过 web api 上传文件 */ using System; u ...
- 返璞归真 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 上传文件, ...
- 前端AngularJS后端ASP.NET Web API上传文件
本篇体验使用AngularJS向后端ASP.NET API控制器上传文件. 首先服务端: public class FilesController : ApiController { //usi ...
- 1.5 WEB API 上传文件
1.前提,设置跨域 2.在控制器头添加允许跨域 /// <summary> /// 文件管理口控制器 /// </summary> [EnableCors("*&qu ...
- HttpClient 测试web API上传文件实例
1.使用HttpClient 测试上传文件并且设置header信息: using Lemon.Common; using Newtonsoft.Json; using System; using Sy ...
- ASP.NET Web API 上传文件
HTML表单: <form id="form1" method="post" enctype="multipart/form-data" ...
- 数据採集之Web端上传文件到Hadoop HDFS
前言 近期在公司接到一个任务.是关于数据採集方面的. 需求主要有3个: 通过web端上传文件到HDFS; 通过日志採集的方式导入到HDFS; 将数据库DB的表数据导入到HDFS. 正好近期都有在这方面 ...
- php 下 html5 XHR2 + FormData + File API 上传文件
FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormD ...
- Web API 上传下载文件
1.引用了一个第三方组件 ICSharpCode.SharpZipLib.Zip; 2.具体代码 实体类,可以用hashtable 替代 ,感觉hashtable 比较灵活 public class ...
随机推荐
- sitemesh2在tomcat和weblogic中同时使用的配置问题
(一)拦截*.do,装饰器中匹配do tomcat 可行 weblogic 不可行 web.xml ~~~ <filter> <filter-name>sitemesh< ...
- Haskell 与范畴论
说到 Haskell,这真是一门逼格极高的编程语言,一般初学者如果没有相关函数式编程的经验,入门直接接触那些稀奇古怪的概念,简直要跪下.现在回想起来,隐隐觉得初学者所拥有的命令式编程语言(impera ...
- Oracle---.oracle函数
数值型函数: 绝对值: ABS(x) [功能]返回x的绝对值 [参数]x,数字型表达式 [返回]数字 [示例] select abs(100),abs(-100) from dual;-------- ...
- 网络拥塞控制与NS2仿真
准备工作: 1. 安装virtual box 虚拟机,并安装虚拟机增强功能,并配制共享文件夹. 共享文件夹自动挂载后的路径为/media/sf_xxx文件夹,xxx为所起的文件名. 解决virtual ...
- cocos2d-x开发: 场景实体(entity)管理
公司现在开新项目,主题的框架部分都是我自己在做,不用受到别人的牵制,所以还算是比较的自由,很好发挥. 游戏并不大,所以需要用到的地方并不多.今天花了一些时间写了场景entity管理的部分代码,还没有完 ...
- bootstrap插件学习-bootstrap.carousel.js
先看bootstrap.carousel.js的结构 var Carousel = function (element, options){} //构造器 Carousel.prototype = { ...
- MongoDB入门二:基本概念
前言 工欲善其事必先利其器.在学习MongoDB之前,需要对MongoDB的一些基本概念有系统的了解. 所以,本篇文章主要介绍MongoDB的一些基本概念,这些概念的定义均来自<MongoDB权 ...
- 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 安 ...
- Linux - 获取Shell命令帮助信息
Manual Page Chapter List 1:所有用户可以操作的指令或可执行文件 2:系统核心调用的函数与工具 3:子调用,常用的函数与函数库 4:设备,硬件文件说明,通常是/dev/的文件 ...
- 推荐几款很棒的 JavaScript 表单美化和验证插件
表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ...