前端页面代码:

  1. <input type="file" class="file_control" /><br />
  2. <input type="file" class="file_control" /><br />
  3. <input type="file" class="file_control" />
  4. <button id="btnUpload" type="button">上传</button>
  5.  
  6. <script type="text/javascript">
  7.  
  8. $(document).ready(function () {
  9. $("#btnUpload").click(function () {
  10. var formdata = new FormData();
  11. var files = $(".file_control");
  12. $.each(files, function (index, domEle) {
  13. formdata.append("file" + index, domEle.files[0]);
  14. });
  15.  
  16. $.ajax({
  17. url: '/api/Service/UpLoad',
  18. type: 'POST',
  19. cache: false,
  20. data: formdata,
  21. processData: false,
  22. contentType: false,
  23. success: function (data) {
  24. alert(data.success);
  25. },
  26. error: function () {
  27. alert("error");
  28. }
  29. }).done(function (res) {
  30.  
  31. }).fail(function (res) {
  32.  
  33. });
  34. });
  35. </script>

后端代码:

  1. /// <summary>
  2. /// 文件上传
  3. /// </summary>
  4. /// <param name="request"></param>
  5. /// <returns></returns>
  6. [HttpPost]
  7. [Route("api/Service/UpLoad")]
  8. public Task<HttpResponseMessage> UpLoad(HttpRequestMessage request)
  9. {
  10. if (!request.Content.IsMimeMultipartContent())
  11. throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
  12. if (!ModelState.IsValid)
  13. throw new HttpResponseException(HttpStatusCode.BadRequest);
  14.  
  15. string root = AppDomain.CurrentDomain.BaseDirectory + @"UploadFiles";
  16. if (!Directory.Exists(root))
  17. Directory.CreateDirectory(root);
  18.  
  19. MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(root);
  20.  
  21. var task = request.Content.ReadAsMultipartAsync(provider).ContinueWith<HttpResponseMessage>(t =>
  22. {
  23. if (t.IsFaulted || t.IsCanceled)
  24. return request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
  25.  
  26. HttpResponseMessage response = null;
  27.  
  28. string filePath = root + @"\" + DateTime.Now.ToString("yyyyMMdd");
  29. if (!Directory.Exists(filePath))
  30. Directory.CreateDirectory(filePath);
  31.  
  32. foreach (var file in provider.FileData)
  33. {
  34. string fileName = file.Headers.ContentDisposition.FileName;
  35.  
  36. if (Regex.IsMatch(fileName, @"^"".*""$"))
  37. fileName = fileName.Trim('"');
  38.  
  39. if (Regex.IsMatch(fileName, @"[\\/]+"))
  40. fileName = Path.GetFileName(fileName);
  41.  
  42. string extName = Path.GetExtension(fileName);
  43. string tempName = DateTime.Now.Ticks.ToString() + extName;
  44. File.Copy(file.LocalFileName, Path.Combine(filePath, tempName));
  45.  
  46. if (File.Exists(file.LocalFileName))
  47. File.Delete(file.LocalFileName);
  48.  
  49. // 转存阿里OSS、七牛云、腾讯云COS
  50.  
  51. response = request.CreateResponse(HttpStatusCode.OK, new { success = true });
  52. }
  53.  
  54. return response;
  55. });
  56.  
  57. return task;
  58. }

*注:如果报IsFaulted=true的错误,基本上是因为你没给input起name造成的。

WebApi实现Ajax模拟Multipart/form-data方式多文件上传的更多相关文章

  1. el-upload用form的方式多文件上传的方法

    使用el-upload组件遇到的坑. 1.第一种感觉最好,首先多个文件是一个http请求,另外还可以传除文件外其他的参数,但是没有进度条了. 发送请求的部分没有注释的部分是我分装了调后台的api,注释 ...

  2. ajax+php (jquery.form插件)实现异步文件上传

    <!DOCTYPE html> <html lang="CN"> <head> <title>upload model</ti ...

  3. WordPress Contact Form 7插件任意文件上传漏洞

    漏洞名称: WordPress Contact Form 7插件任意文件上传漏洞 CNNVD编号: CNNVD-201311-415 发布时间: 2013-11-28 更新时间: 2013-11-28 ...

  4. python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,

    python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...

  5. ANDROID使用MULTIPARTENTITYBUILDER实现类似FORM表单提交方式的文件上传

    最近在做 Android 端文件上传,要求采用 form 表单的方式提交,项目使用的 afinal 框架有文件上传功能,但是始终无法与php写的服务端对接上,无法上传成功.读源码发现:afinal 使 ...

  6. 使用Anthem.NET 1.5中的FileUpload控件实现Ajax方式的文件上传

    Anthem.NET刚刚发布了其最新的1.5版本,其中很不错的一个新功能就是对文件上传功能的Ajax实现.本文将简要介绍一下该功能的使用方法. Anthem.NET的下载与安装 Anthem.NET可 ...

  7. jquery ajax file upload NET MVC 无刷新文件上传

    网上有各种各样的文件上传方法,有基于JS框架的.也有基于flash swf插件的. 这次分享一个比较简单而且实用能快速上手的文件上传方法,主要步骤: 1.引用Jquery包,我用的是jquery-1. ...

  8. C#模拟请求,模拟登录,Cookie设置、文件上传等问题汇总

    由于业务需求,最近需要模拟完成登陆某个网站,并上传所需要的文件.在开发途中,遇到了很多问题,现在,就我遇到的一些问题及解决办法说明如下,希望对遇到同样问题的人有所帮助.因为技术有限,可能有些内容并不完 ...

  9. SpringMVC注解方式与文件上传

    目录: springmvc的注解方式 文件上传(上传图片,并显示) 一.注解 在类前面加上@Controller 表示该类是一个控制器在方法handleRequest 前面加上 @RequestMap ...

随机推荐

  1. ERP和C4C中的function location

    SAP ERP里的Functional Locations,下载到SAP Cloud for Customer后成为类型为'Functional Location'的Installation Poin ...

  2. CPU体系结构

    http://blog.csdn.net/liuxc0116/article/details/17004313 1.算术逻辑单元ALU(Arithmetic Logic Unit)ALU是运算器的核心 ...

  3. 缓存验证Last-Modifie和Etag的使用

    看这张图,是浏览器发出请求到请求缓存到过程,这么一个原理 那么http里面如何进行验证呢?主要有两个验证到http头 Last-Modified(上次修改时间) 主要配合If-Modified-Sin ...

  4. 计算1到n的n次方之和

    实现效果: 知识运用: Math类的Pow方法:返回指定数字的指定次幂 public static double Pow(double x,double y) 实现代码: public string ...

  5. Maven 配置本地依赖jar

    现有json-1.0.jar,引入依赖方法如下: 1.  在项目下新建 lib 目录,复制json-1.0.jar到lib目录下 pom.xml中添加配置 <dependency> < ...

  6. matlab 下载

    Obrazy DVD programu Matlab ke stažení Verze 2015b Verze 2015a Verze 2014b Verze 2014a Verze 2012b Ve ...

  7. P1069 细胞分裂

    P1069 细胞分裂 考虑质因数分解 先将m1,质因数分解后再根据数学定理将所有质数的质数全乘m2 然后将输入的数据相同处理,再判断 顺便说一下判断规矩 1肯定不行 如果分解后有没有m1质因数分解中的 ...

  8. iPad游戏 Calcculator: The Game 程序自动计算求解方法

    今天在iPad上下了个小游戏,主要是一个计算器的界面,有开始值,目标值,限定步数,以及一些加减乘除,还有作者脑洞想出来的功能键,主要有左移,直接把一个数加到末尾,将其中的某个数改为另一个数等等..玩到 ...

  9. Rxjava+retrofit+mvp整合

    转载请标明出处: http://blog.csdn.net/forezp/article/details/52621898 本文出自方志朋的博客 最近在看Rxjava,写了一个简单的 demo整合了R ...

  10. POJ2409 Let it Bead(Polya定理)

    Let it Bead Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6443   Accepted: 4315 Descr ...