java文件上传有几种_java上传文件常见几种方式

1、ServletFileUpload

表单提交中当提交数据类型是multipare/form-data类型的时候,如果我们用servlet去做处理的话,该http请求就会被servlet容器,包装成httpservletRequest对象

,在由相应的servlet进行处理。

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

packagecom.jws.app.operater.service.impl;importjava.io.File;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjavax.annotation.Resource;importjavax.servlet.http.HttpServletRequest;importorg.apache.commons.fileupload.FileItem;importorg.apache.commons.fileupload.FileItemFactory;importorg.apache.commons.fileupload.disk.DiskFileItemFactory;importorg.apache.commons.fileupload.servlet.ServletFileUpload;importorg.apache.log4j.Logger;importorg.springframework.stereotype.Service;importnet.sf.json.JSONObject;importcom.jws.app.operater.data.UserInfoMapper;importcom.jws.app.operater.model.UserInfo;importcom.jws.app.operater.service.PersionPhoteAuthServer;importcom.jws.common.constant.Constants;importcom.jws.common.constant.ConstantsCode;importcom.jws.common.util.JiveGlobe;importcom.jws.common.util.ResultPackaging;

@Service("persionPhoteAuthServerImpl")public class PersionPhoteAuthServerImpl implementsPersionPhoteAuthServer {

@ResourceprivateUserInfoMapper userInfoMapper;private final Logger logger = Logger.getLogger(this.getClass());

@OverridepublicJSONObject uploadPhoto(HttpServletRequest reques) {

JSONObject returnObject= newJSONObject();

String path=Constants.imageUrl;

File repositoryFile= newFile(path);if (!repositoryFile.exists()) {repositoryFile.mkdirs();}

FileItemFactory factory= new DiskFileItemFactory(1024 * 32,repositoryFile);

ServletFileUpload upload= newServletFileUpload(factory);

upload.setHeaderEncoding("utf-8");

upload.setSizeMax(1024 * 1024 * 500);

List> fileItr = null;try{

fileItr=upload.parseRequest(reques);//讲非文件值放在map中

HashMap map = new HashMap<>();

Iterator> iter =fileItr.iterator();while(iter.hasNext()) {

FileItem item=(FileItem) iter.next();if(item.isFormField()) {

map.put(item.getFieldName(), item.getString());

}

}//验证参数

if (map == null || !map.containsKey("openid")) {

returnObject=ResultPackaging.dealJsonObject(ConstantsCode.RESULT_CODE_FAIL, ConstantsCode.CODE_LACK_PARAMETER, null);returnreturnObject;

}

String openid= map.get("openid");//处理文件

boolean isTrue = true;

String filename= "";

Iterator> iter1 =fileItr.iterator();while(iter1.hasNext()) {

FileItem f=(FileItem) iter1.next();if (!f.isFormField()) {//详情 name=abc.png, size=376507 bytes, isFormField=false, FieldName=picture1

filename = f.getName() == null ? "": f.getName();

filename= JiveGlobe.getFromRom()+".jpg";

File saveFile= newFile(path, filename);if(saveFile.exists()) {

isTrue= false;break;}

f.write(saveFile);

}

}if(JiveGlobe.isEmpty(filename)){

returnObject=ResultPackaging.dealJsonObject(ConstantsCode.RESULT_CODE_FAIL, ConstantsCode.CODE_LACK_PARAMETER, null);returnreturnObject;

}

returnObject=ResultPackaging.dealJsonObject(ConstantsCode.RESULT_CODE_SUCCESS, ConstantsCode.RESULT_CODE_SUCCESS, null);//保存文件信息

UserInfo rd = newUserInfo();

rd.setSpareField1("1");

rd.setSpareField3(filename);

rd.setOpenId(openid);

userInfoMapper.updateByPrimaryKey(rd);

}catch(Exception e) {

System.out.println(e);

logger.error("###认证失败"+e);

}returnreturnObject;

}

}

View Code

2、MultipartFile

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

@RequestMapping("/upload")

@ResponseBodypublic String handleFileUpload(@RequestParam("file") MultipartFile file) {if(file.isEmpty()) {return "文件为空";

}//获取文件名

String fileName =file.getOriginalFilename();

System.out.println("上传的文件名为:" +fileName);//获取文件的后缀名

String suffixName = fileName.substring(fileName.lastIndexOf("."));

System.out.println("上传的后缀名为:" +suffixName);//文件上传后的路径

String filePath = "D://";

File dest= new File(filePath +fileName);//检测是否存在目录

if (!dest.getParentFile().exists()) {

dest.getParentFile().mkdirs();

}try{

file.transferTo(dest);return "上传成功";

}catch(IllegalStateException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}return "上传失败";

}

View Code

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

/*** 多文件具体上传时间,主要是使用了MultipartHttpServletRequest和MultipartFile

*

*@paramrequest

*@return

*/@RequestMapping(value= "/batch/upload", method =RequestMethod.POST)public@ResponseBody String handleFileUpload1(HttpServletRequest request) {

List files = ((MultipartHttpServletRequest) request).getFiles("file");

String filePath= "D://";

MultipartFile file= null;for (int i = 0; i < files.size(); ++i) {

file=files.get(i);//获取文件名

String fileName =file.getOriginalFilename();

System.out.println("上传的文件名为:" +fileName);if (!file.isEmpty()) {

File dest= new File(filePath +fileName);//检测是否存在目录

if (!dest.getParentFile().exists()) {

dest.getParentFile().mkdirs();

}try{

file.transferTo(dest);

}catch(Exception e) {return "上传失败 " + i + " => " +e.getMessage();

}

}else{return "上传失败 " + i + " 文件为空.";

}

}return "上传成功";

}

View Code

3、CommonsMultipartResolver

*

* @param request

* @return

*/

@ResponseBody

@RequestMapping("/uploadFile")

public Map uploadFile(HttpServletRequest request) {

Map map = new HashMap();

// 将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)

CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());

// 检查form中是否有enctype="multipart/form-data"

if (multipartResolver.isMultipart(request)) {

// 将request变成多部分request

MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;

// 获取multiRequest 中所有的文件名

Iterator iter = multiRequest.getFileNames();

while (iter.hasNext()) {

// 一次遍历所有文件

MultipartFile file = multiRequest.getFile(iter.next().toString());

try {

if (file != null && StringUtils.isNotBlank(file.getOriginalFilename().trim())) {

Map metas = new HashMap();

// 取得文件后缀

String filename = file.getOriginalFilename();

String newFileName = System.currentTimeMillis() + (int) (Math.random() * 100)

+ filename.substring(filename.lastIndexOf("."));

metas.put(StorageConstants.META_KEY_FILENAME, newFileName);

String imgUrl = storageService.store(file.getBytes(), metas);

map.put("imgUrl", imgUrl);

map.put("retCode", "success");

// map.put("imgUrl",

// "https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=611483611,2895064642&fm=117&gp=0.jpg");

}

} catch (Exception e) {

e.printStackTrace();

}

}

} else {

map.put("retCode", "error");

}

return map;

原文:http://www.cnblogs.com/kimobolo/p/7109999.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值