Java原生服务器接收上传文件 不使用MultipartFile类

 更新时间:2019年09月25日 11:29:58   投稿:lijiao  
这篇文章主要为大家详细介绍了Java原生服务器接收上传文件,不使用MultipartFile类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

由于工作中 使用 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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Kotlin修饰符lateinit(延迟初始化)案例详解

    Kotlin修饰符lateinit(延迟初始化)案例详解

    这篇文章主要介绍了Kotlin修饰符lateinit(延迟初始化)案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • java中-jar 与nohup的对比

    java中-jar 与nohup的对比

    这篇文章主要介绍了java中 -jar 与nohup的对比的相关资料,需要的朋友可以参考下
    2017-05-05
  • maven升级版本后报错:Blocked mirror for repositories

    maven升级版本后报错:Blocked mirror for repositories

    本文主要介绍了maven升级版本后报错:Blocked mirror for repositories,文中的解决方法非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • java实现网页爬虫的示例讲解

    java实现网页爬虫的示例讲解

    下面小编就为大家带来一篇java实现网页爬虫的示例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java编程实现中英混合字符串数组按首字母排序的方法

    Java编程实现中英混合字符串数组按首字母排序的方法

    这篇文章主要介绍了Java编程实现中英混合字符串数组按首字母排序的方法,涉及Java字符串操作及拼音转换的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Java集合总结

    Java集合总结

    今天小编就为大家分享一篇关于Java集合总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java打印九九乘法表代码详情

    Java打印九九乘法表代码详情

    这篇文章主要介绍了Java打印九九乘法表,使用了双重for循环,使用do{}while()实现打印九九乘法表这些好玩的语法实现,感兴趣的小伙伴可参考下面文章内容
    2021-09-09
  • javaweb图书商城设计之购物车模块(3)

    javaweb图书商城设计之购物车模块(3)

    这篇文章主要为大家详细介绍了javaweb图书商城设计之购物车模块的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Java LinkedList源码深入分析

    Java LinkedList源码深入分析

    链表(Linkedlist)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。链表可分为单向链表和双向链表
    2022-08-08
  • springboot内置tomcat之NIO处理流程一览

    springboot内置tomcat之NIO处理流程一览

    这篇文章主要介绍了springboot内置tomcat之NIO处理流程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论