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

网友投稿 549 2022-12-26


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

由于工作中 使用 MultipartFile 与现有的一些上传文件组件冲突

所以使用其他的接收上传文件的方法.

首先我把 MultipartFile 类的配置文件注释掉.

然后把原有的文件接收方法,改为此代码,

注释详细,就不多废话了:

/**

* 从 request 中获取上传的文件

* @warn 后续需要 删除处理文件上传时

* 生成的临时文件 ,使用item.delete();

* @param request http请求

* @param encoding 解码方式,传null默认 utf-8

* @return 返回的是一个 FileItem 集合

*/

public List getUploadInputSteam(HttpServletRequest request,String encoding){

if (encoding==null || "".equals(encoding)) {

encoding = "UTF-8";

}

List items = new ArrayList();

//初始化需要解析文件的几个类

DiskFileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload upload = new ServletFileUpload(factory);

upload.setHeaderEncoding(encoding);

if (!ServletFileUpload.isMultipartContent(request)) {

return items;

}

try {

//使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List集合

//每一个FileItem对应一个Form表单的输入项

List 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 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.解析文件的类 http://都来自 org.apache.commons 的这个包

2.前端传来一定要写 好表单的,action 的 url ,enctype="multipart/form-data",post请求

3.input 按钮指明 type="file" name="xxx" 然后还有 提交按钮  (使用ajax异步提交也行)

例如:

enctype="multipart/form-data">


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:怎么接口测试工具(常用的接口测试工具)
下一篇:Java泛型extends关键字设置边界的实现
相关文章

 发表评论

暂时没有评论,来抢沙发吧~