要上传文件,需要用post方法,并且设置enctype为multipart/form-data。

  1. <form action="/upload" method="post" enctype="multipart/form-data">
  2.   <input type="text" name="param1">
  3.   <input type="text" name="param2">
  4.   <input type="file" name="fileparam">
  5.   <button type="submit">上传</button>
  6. </form>

关于multipart/form-data

multipart/form-data与post方法结合,用了multipart/form-data的post请求与普通的post请求的请求头和请求体都有不同。

普通post请求头中Content-Type字段值为:

  1. Content-Type: application/x-www-form-urlencoded

multipart/form-data请求头中Content-Type字段值为multipart/form-data; boundary=xxxxxxx, (xxxxxx规定了请求体中的内容分隔符)。

  1. Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryZpsWTsOiRHI0TBW7

普通post请求的请求体格式为(不会上传文件内容):

  1. param1=AAAA&param2=&fileparam=test.txt

而multipart/form-data请求体格式为(包含文件内容):

  1. ------WebKitFormBoundaryjUVXJ3PslTEBh9as
  2. Content-Disposition: form-data; name="param1"
  3.  
  4. AAAA
  5. ------WebKitFormBoundaryjUVXJ3PslTEBh9as
  6. Content-Disposition: form-data; name="param2"
  7.  
  8. ------WebKitFormBoundaryjUVXJ3PslTEBh9as
  9. Content-Disposition: form-data; name="fileparam"; filename="test.txt"
  10. Content-Type: text/plain
  11.  
  12. contents of file
  13. ------WebKitFormBoundaryjUVXJ3PslTEBh9as

后台处理

使用multipart/form-data提交的数据使用HttpServletRequest对象的getParameter()等方法无法读取。可以读取整个请求体数据流自己解析数据。但更好的方式是使用已经有的第三方工具类,如fileupload,jspsmartupload。下面的例子中使用的是fileupload。

  1. HttpServletRequeest request=....
  2. if(ServletFileUpload.isMultipartContent(request))
    {
  3. FileItemFactory factory = new DiskFileItemFactory();
  4. ServletFileUpload upload = new ServletFileUpload(factory);
  5. List<FileItem> items = upload.parseRequest(request);
  6. for(FileItem i: items)
  7. {
  8. i.getFieldName();   //参数名
  9. //i.getString();   //参数值(返回字符串),如果是上传文件,则为文件内容
  10.      //i.get();   //参数值(返回字节数组),如果是上传文件,则为文件内容
         //i.getSize();     //参数值的字节大小
  11.      //i.getName();     //上传文件的文件名
  12.      //i.getContentType(); //上传文件的内容类型
  13.      if(!i.isFormField()&&i.getSize()>0)   //简单参数返回true,文件返回false
  14.       Files.write(Paths.get("/upload/"+Paths.get(i.getName()).getFileName()), i.get());
  15.   }
    }

multipart/form-data请求与文件上传的更多相关文章

  1. Django 10 GET和POST(HttpRequest对象,GET和POST请求,文件上传,HttpResponse对象的cookie)

    Django 10 GET和POST(HttpRequest对象,GET和POST请求,文件上传,HttpResponse对象的cookie) 一.HttpRequest对象 #HttpRequest ...

  2. Android okHttp网络请求之文件上传下载

    前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...

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

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

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

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

  5. 前端笔记之微信小程序(三)GET请求案例&文件上传和相册API&配置https

    一.信息流小程序-GET请求案例 1.1服务端接口开发 一定要养成接口的意识,前端单打独斗出不来任何效果,必须有接口配合,写一个带有分页.关键词查询的接口: 分页接口:http://127.0.0.1 ...

  6. 测试平台系列(92) 让http请求支持文件上传

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节呢,我们编写了oss的 ...

  7. 使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传

    package org.caeit.cloud.dev.util; import java.io.File; import java.io.IOException; import java.io.Un ...

  8. Laravel请求/Cookies/文件上传

    一.HTTP请求 1.基本示例:通过依赖注入获取当前 HTTP 请求实例,应该在控制器的构造函数或方法中对Illuminate\Http\Request 类进行类型提示,当前请求实例会被服务容器自动注 ...

  9. form+iframe实现ajax文件上传

    在做文件上传时除了传入文件外,还有附件参数,并且要求不刷新页面,之前是表单提交的方式,现在修改成ajax上传的方式,由于没有选择用插件,所以用form+iframe的方式,并且这种方式对IE8以上及主 ...

  10. form表单多文件上传

    1.html/jsp主页 <%@ page language="java" contentType="text/html; charset=UTF-8" ...

随机推荐

  1. 搭建Maven工程的时候,做单元测试,报ClassNotFoundException

    搭建Maven工程的时候报错 问题原因是在spring.xml中配置的  classpath:config.properties  没有在工程中创建.

  2. 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结

    转自 http://www.jb51.net/article/37527.htm,感谢作者 #include "stdafx.h"      #include <iostre ...

  3. soft lockup和hard lockup介绍

    转自:http://www.cnblogs.com/openix/p/4034530.html 转自:http://blog.csdn.net/panzhenjie/article/details/1 ...

  4. Java Hour 46 SLF4J

    SLF4J(Simple Logging Facade for Jave). 上个章节在配置启动项目后,会报一个奇怪的错误,一开始以为是Maven 依赖有冲突,其实是和slf4j 密切相关的. 本文原 ...

  5. Z-XML团队年终博客整理

    一个优秀的团队一定有逻辑清晰,风格优雅,严格规范的博客. ------图灵 大三上转眼间已经到了收官阶段,我们的软工课也逐渐接近尾声.在二轮迭代即将结束的时候,当我们梳理一路走来的软工课,我们发现自己 ...

  6. 怎么在手机上查看sqlite db

    在 从 百度应用 下载“SQLite编辑器(SQLite Editor)” 安装到手机上.前体是 手机已经Root(可以用360一键Root软件进行root).

  7. OD使用心得

    查看堆栈 从返回前面的竖线 到 竖线结束 也就是到 (从返回 msconfig.0065a318) 全看.这样不会丢失些东西 或者 看堆栈  直接将堆栈框拉大 避免有些东西没有看到

  8. Web安全性测试总结

    一.工具扫描 目前web安全扫描器针对 XSS.SQL injection .OPEN redirect .PHP File Include漏洞的检测技术已经比较成熟. 商业软件web安全扫描器:有I ...

  9. 配置JDKAndroid 2D游戏引擎AndEngine

    配置JDKAndroid 2D游戏引擎AndEngine JDK全称为Java Development Kit(也即Java开发包),是用于支持Java 编程的基础.无论是什么编程,只要用到了Java ...

  10. SignalR —— Asp.net RealTime的春天

    一般的例子:http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-gettin ...