angularjs springboot上传文件ContentType:multipart/form-data

原创 2018年04月17日 15:24:27

1、Http协议传输中可以传送多部分对象集合。对应的Content-Type为multipart/form-data

Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="field1"
Joe Blow
--AaB03x
Content-Disposition: form-data; name="pics"; filename="file1.txt"
Content-Type: text/plain
...(file1.txt的数据)...
--AaB03x--

上面为http请求时传递的实体数据,包含两个不同的对象,字符串field1与文件pics

field1=Joe Blow  pics=file1.txt

2、http使用 boundary 字符串来划分多部分对象集合指明的各类实体。在boundary 字符串指定的各个实体的起始行之前插入“--”标记(例如:--AaB03x、--THIS_STRING_SEPARATES),而在多部分对象集合对应的字符串的最后插入“--”标记(例如:--AaB03x--、--THIS_STRING_SEPARATES--)作为结束。boundary一般由浏览器自动随机生成。

使用multipart/form-data传递数据时一般不设置Content-Type,浏览器会设置该首部并带上生成的boundary,类似于

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryzxPPZRJEmGdLBx97

主动设置Content-Type为multipart/form-data时,会丢掉boundary值,导致后台无法解析数据。

3、附angularjs与spring boot请求示例

angularjs请求:

  $http.post(url,params,{
        headers: {
            'title': 'boss',
             'userId':user.id,
             'SESSIONID': user.sessionId,
             'Content-Type': undefined
              },
             transformRequest: angular.identity
         }).success(function(data){
              if (data.success) {
                 callback(data);
              } else {
                 toastr.error('交互失败!');
                 callback(data);
             }
         }).error(function() {
               toastr.error('请求失败,请检查网络!');
         });
SpringBoot代码:
public AjaxResponseMessage addBalance(@RequestParam("file") MultipartFile file,
								@RequestParam("accountId") int accountId,
								@RequestParam("accountChange") Integer accountChange,
								@RequestParam(value = "remarks", required = false) String remarks) {

	AjaxResponseMessage ajaxResponseMessage = new AjaxResponseMessage();
	try {
		ccountService.addBalance(accountId, accountChange, remarks, file);
	 catch (Exception e) {
		ajaxResponseMessage.setSuccess(false);
	}
	return ajaxResponseMessage;
}

C#中HttpWebRequest用Post提交Content-Type: multipart/form-data;

在C#中有HttpWebRequest类,可以很方便用来获取http请求,但是这个类对Post方式没有提供一个很方便的方法来获取数据。网上有很多人提供了解决方法,但都参差不齐,这里我把我使用的方法总结...
  • shifeilongsuper
  • shifeilongsuper
  • 2016-01-10 21:41:23
  • 2326

multipart/form-data请求与文件上传的细节

要上传文件,需要用post方法,并且设置enctype为multipart/form-data。 form action="/upload" method="post" enctype="m...
  • zshake
  • zshake
  • 2017-09-14 21:45:57
  • 2819

利用FormData异步提交content-type为jpg,等流方面信息 --2016.04.20

利用FormData异步提交content-type为jpg,等流方面信息 –2016.04.20平常在提交一个包含上传文件流信息都是使用form表单提交,最近在业务上需要异步提交图片,以前都是用一些...
  • juncai91
  • juncai91
  • 2016-10-18 19:03:01
  • 504

如何用SpringBoot框架来接收multipart/form-data文件

今天遇到一个坑,这里给大家介绍一下。现在很多文件上传类型都是multipart/form-data类型的,HTTP请求如下所示:可是问题就在于如果用传统的Struts2或者servlet等都可以很容易...
  • linzhiqiang0316
  • linzhiqiang0316
  • 2017-08-09 21:27:04
  • 10277

利用HttpClient发送基于Content-Type="multipart/form-data"形式的表单

一、利用HttpClient发送基于Content-Type="multipart/form-data"形式的表单 package com.test.httpclient; import java...
  • gao12333
  • gao12333
  • 2017-06-19 13:41:01
  • 1579

解决httpclient上传multipart form-data文件失败

目标URL的multipart form-data是这样的-----------------------------7e1a51350702 Content-Disposition: form-dat...
  • dgeek
  • dgeek
  • 2017-09-07 21:56:28
  • 1331

Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传

  • 2015年01月03日 13:34
  • 7KB
  • 下载

C#中HttpWebRequest用Post提交Content-Type: multipart/form-data; boundary=

在C#中有HttpWebRequest类,可以很方便用来获取http请求,但是这个类对Post方式没有提供一个很方便的方法来获取数据。网上有很多人提供了解决方法,但都参差不齐,这里我把我使用的方法总结...
  • flymorn
  • flymorn
  • 2011-09-12 21:31:18
  • 16648

关于文件上传踩过的坑multipart/form-data

1.content-type multipart-formdata:常用的文件上传请求编码格式 application/x-www-urlencoded:默认的字符编码格式,用于上传表单,多用于文...
  • wjqiu
  • wjqiu
  • 2016-04-29 16:32:44
  • 3551

HttpClient以multipart/form-data上传文件

POST上传文件 最早的HTTP POST是不支持文件上传的,给编程开发带来很多问题。但是在1995年,ietf出台了rfc1867,也就是《RFC 1867 -Form-based File U...
  • wsdtq123
  • wsdtq123
  • 2017-12-25 01:02:14
  • 784
收藏助手
不良信息举报
您举报文章:angularjs springboot上传文件ContentType:multipart/form-data
举报原因:
原因补充:

(最多只允许输入30个字)