1、ServletFileUpload

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

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

    

package com.jws.app.operater.service.impl;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service; import net.sf.json.JSONObject; import com.jws.app.operater.data.UserInfoMapper;
import com.jws.app.operater.model.UserInfo;
import com.jws.app.operater.service.PersionPhoteAuthServer;
import com.jws.common.constant.Constants;
import com.jws.common.constant.ConstantsCode;
import com.jws.common.util.JiveGlobe;
import com.jws.common.util.ResultPackaging; @Service("persionPhoteAuthServerImpl")
public class PersionPhoteAuthServerImpl implements PersionPhoteAuthServer {
@Resource
private UserInfoMapper userInfoMapper;
private final Logger logger = Logger.getLogger(this.getClass()); @Override
public JSONObject uploadPhoto(HttpServletRequest reques) {
JSONObject returnObject = new JSONObject();
String path = Constants.imageUrl;
File repositoryFile = new File(path);
if (!repositoryFile.exists()) {repositoryFile.mkdirs();}
FileItemFactory factory = new DiskFileItemFactory(1024 * 32,repositoryFile);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");
upload.setSizeMax(1024 * 1024 * 500);
List<?> fileItr = null;
try {
fileItr = upload.parseRequest(reques);
// 讲非文件值放在map中
HashMap<String, String> 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);
return returnObject;
}
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 = new File(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);
return returnObject;
}
returnObject =ResultPackaging.dealJsonObject(ConstantsCode.RESULT_CODE_SUCCESS, ConstantsCode.RESULT_CODE_SUCCESS, null);
//保存文件信息
UserInfo rd = new UserInfo();
rd.setSpareField1("1");
rd.setSpareField3(filename);
rd.setOpenId(openid);
userInfoMapper.updateByPrimaryKey(rd);
} catch (Exception e) {
System.out.println(e);
logger.error("###认证失败"+e);
}
return returnObject;
} }

2、MultipartFile

   

@RequestMapping("/upload")
@ResponseBody
public 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 "上传失败";
}
/**
* 多文件具体上传时间,主要是使用了MultipartHttpServletRequest和MultipartFile
*
* @param request
* @return
*/
@RequestMapping(value = "/batch/upload", method = RequestMethod.POST)
public @ResponseBody String handleFileUpload1(HttpServletRequest request) {
List<MultipartFile> 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 "上传成功";
}

3、CommonsMultipartResolver

  

*
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping("/uploadFile")
    public Map<String, Object> uploadFile(HttpServletRequest request) {
        Map<String, Object> map = new HashMap<String, Object>();
        // 将当前上下文初始化给 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<String, String> metas = new HashMap<String, String>();
                        // 取得文件后缀
                        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;

java上传文件常见几种方式的更多相关文章

  1. SpringMVC上传文件的三种方式(转)

    直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/common ...

  2. SpringMVC上传文件的三种方式

    直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/common ...

  3. SpringMVC上传文件的三种方式(转载)

    直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/common ...

  4. SpringMVC上传文件的三种方式(转帖)

    /* * 通过流的方式上传文件 * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象 */ @Re ...

  5. Django上传文件的两种方式

    基于form表单上传文件 HTML <h3>基于form表单的上传文件</h3> <form action="" method="post& ...

  6. 上传文件的三种方式xhr,ajax和iframe及上传预览

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. SpringMVC上传文件的三种方式(待整理...)

    参考链接 http://www.cnblogs.com/fjsnail/p/3491033.html

  8. java 上传文件到 ftp 服务器

    1.  java 上传文件到 ftp 服务器 package com.taotao.common.utils; import java.io.File; import java.io.FileInpu ...

  9. java读取XML文件的四种方式

    java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...

随机推荐

  1. 201772020113 李清华《面向对象程序设计(java)》第十五周学习总结

    1.实验目的与要求 (1) 掌握Java应用程序的打包操作: (2) 了解应用程序存储配置信息的两种方法: (3) 掌握基于JNLP协议的java Web Start应用程序的发布方法: (5) 掌握 ...

  2. HTML5 关于本地操作文件的方法

    由于传统 b/s 开发出于安全性的考虑,浏览器对于本地文件的操作权限几乎没有,用户想要操作一个文件基本都是采用先上传到服务器, 再回显给浏览器供用户编辑,裁剪等的方法,这种方式虽然可行,但其对于服务器 ...

  3. openstack使用openvswitch实现vxlan的方法

    openstack使用openvswitch实现vxlan,分享给大家,具体如下: openstack环境: 1 版本:ocata 2 系统:ubuntu16.04.2 3 控制节点 1个 + 计算节 ...

  4. dubbo 概述和使用

    dubbo核心概念 apache是一款高性能.轻量级的开源java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现 官网:http://dubbo ...

  5. 50代码HTML5 Canvas 3D 编辑器优雅搞定

    1024程序员节刚过,手痒想实现一个html的3d编辑器,看了three.js 同时还看了网上流传已久的<<基于 HTML5 Canvas 的简易 2D 3D 编辑器>>,都觉 ...

  6. react rem

    1 :安装 postcss-px2rem 2 在webpack.config.js 中添加  引入 const px2rem = require('postcss-px2rem');   找到: lo ...

  7. 对于在git上面拉代码报"error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054"解决方法

    主要原因是安全设置的问题: 首先执行git config http.sslVerify "false"   若出现下列错误 git config http.sslVerify &q ...

  8. Python学习—数据库篇之初识mysql

    一.下载与安装 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好 ...

  9. C#少量数据分页方法

    string sql = @"select [Name],[Value],[TypeCode] from [dbo].[SYS_Parameter] WHERE TypeCode = 'Us ...

  10. 关于AVL树的思考

    AVL树即平衡二叉树,每个结点有一个平衡因子,即左子树高度减去右子树高.每插入一个结点时,从根部开始按二叉排序树的方法,与节点不断比较,按大小向左右子树插入.在与最后的节点比较后插入时,若有兄弟节点, ...