Java原生服务器接收上传文件 不使用MultipartFile类
作者:lijiao 发布时间:2023-11-09 19:31:36
标签:java,服务器,上传文件
由于工作中 使用 MultipartFile 与现有的一些上传文件组件冲突
所以使用其他的接收上传文件的方法.
首先我把 MultipartFile 类的配置文件注释掉.
<!-- <bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
<property name="maxUploadSize" value="10485760" />
最多上传10M,初始化了此类,MultipartFile 将会收到文件,而request将不会!
</bean> -->
然后把原有的文件接收方法,改为此代码,
注释详细,就不多废话了:
/**
* 从 request 中获取上传的文件
* @warn 后续需要 删除处理文件上传时
* 生成的临时文件 ,使用item.delete();
* @param request http请求
* @param encoding 解码方式,传null默认 utf-8
* @return 返回的是一个 FileItem 集合
*/
public List<FileItem> getUploadInputSteam(HttpServletRequest request,String encoding){
if (encoding==null || "".equals(encoding)) {
encoding = "UTF-8";
}
List<FileItem> items = new ArrayList<FileItem>();
//初始化需要解析文件的几个类
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding(encoding);
if (!ServletFileUpload.isMultipartContent(request)) {
return items;
}
try {
//使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合
//每一个FileItem对应一个Form表单的输入项
List<FileItem> list = upload.parseRequest(request);
for (FileItem item : list) {
//如果fileitem中封装的是普通输入项的数据
if (item.isFormField()) {
// String name = item.getFieldName();
// //解决普通输入项的数据的中文乱码问题
// String value = item.getString(encoding);
// System.out.println(name +"="+value);
}else{
String fileName = item.getName();
if (fileName==null||fileName.trim().equals("")) {
continue;
}
//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,
//如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
//处理获取到的上传文件的文件名的路径部分,只保留文件名部分
// fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
items.add(item);
}
}
} catch (Exception e) {
e.printStackTrace();
return items;
}
return items;
}
@RequestMapping("/testUpload")
@ResponseBody
public String testUpload(HttpServletRequest request) throws Exception{
//获取文件集合
List<FileItem> items = getUploadInputSteam(request, "utf-8");
//取第一个做实验
FileItem item = items.get(0);
//上传的文件名
String fileName = item.getName();
fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
//数据流获取,获得数据流你可以自由解析 , 保存 等操作
InputStream in = item.getInputStream();
//关闭流
in.close();
//最后一定要删除,item的临时文件
item.delete();
return "success!";
}
注意:
1.解析文件的类 都来自 org.apache.commons 的这个包
2.前端传来一定要写 好表单的,action 的 url ,enctype="multipart/form-data",post请求
3.input 按钮指明 type="file" name="xxx" 然后还有 提交按钮 (使用ajax异步提交也行)
例如:
<form action="test/testUpload" method="post"
enctype="multipart/form-data">
<input type="file" name="myFile" value="选择文件">
<input type="submit" value="提交文件" />
</form>
来源:https://blog.csdn.net/weixin_42144379/article/details/85333023


猜你喜欢
- 同步器简介 学习以来对线程的操作有很大的改观,从c/c++的mute
- Lucene提供了一个简单却强大的应用程序接口(API),能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工
- 前言上一篇讲了普通轮询、加权轮询的两种实现方式,重点讲了平滑加权轮询算法,并在文末留下了悬念:节点出现分配失败时降低有效权重值;成功时提高有
- 什么是Kotlin?Kotlin是一种可以在 Java 虚拟机 (JVM) 上运行的开源编程语言。该语言可以在许多平台上运行。它是一种将面向
- 飞行棋游戏大家应该都玩过吧,如何使用C#语言进行编写,本文实例就为大家分享了飞行棋C#实现代码,供大家参考,具体内容如下using Syst
- Spring spring-context-indexer依赖<dependencies> <d
- 顺序结构顺序结构就是按照代码从上往下执行,我们运行的程序就是从上往下的顺序结构,当遇到方法的时候,才去执行方法。例如:System.out.
- Android ScrollView无法填充满屏幕的解决办法ScrollView滚动视图是指当拥有很多内容、屏幕显示不完时、需要通过滚动跳来
- 1.PDF文件简介PDF是可移植文档格式,是一种电子文件格式,具有许多其他电子文档格式无法相比的优点。PDF文件格式可以将文字、字型、格式、
- /// <summary> /// 将日期字
- 以前编程的时候,遇到倒计时的功能时,经常自己去写,但其实Android已经帮封装好了一个倒计时类CountDownTimer,其实是将后台线
- 周末这天手痒,正好没事干,想着写一个分页的例子出来给大家分享一下。这个案例分前端和后台两部分,前端使用面向对象的方式写的,里面用到了一些回调
- 题目要求阅读理解读完题的我be like:去看了遍英文版就懂了,题目中的种类【type】不是种类数…&hell
- 目录一、字节码文件 与 JVM二、字节码文件示例三、字节码文件二进制结构分析1、魔数2、次版本号3、主版本号4、常量池个数总结一、字节码文件
- 执行引擎也只有几个概念, JVM方法调用和执行的基础数据结构是 栈帧, 是内存区域中 虚拟机栈中的栈元素, 每一个方法的执行就对应着一个栈帧
- 1.下载JDK查看最新:http://www.oracle.com/technetwork/java/javase/downloads/in
- spring开启声明式事务导入依赖pom.xml<dependencies>  
- 声明式事务很方便,尤其纯注解模式,仅仅几个注解就能控制事务了思考:这些注解都做了什么?好神奇!@EnableTransactionManag
- 一、串口连接的打开与关闭串口,即COM口,在.NET中使用 SerialPort 类进行操作。串口开启与关闭,是涉及慢速硬件的IO操作,频繁
- 本文实例为大家分享了Android创建发送和接收短信应用的简单实现过程,供大家参考,具体内容如下一、接收短信项目的结构如下:一个简单的接收和