zoukankan      html  css  js  c++  java
  • servlet上传和文件转成流

    import java.io.File;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Random;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.apache.commons.lang3.StringUtils;
    
    public class FileUpload {
    
    /**
    * 
    * @Title: upload 
    * @Description: TODO(文件上传保存的本地,可同时上传多个文件) 
    * @param @param request    
    * @param @param savePath    文件要保存的路径
    * @param @param tempPath    文件上传时的缓存路径
    * @param @return
    * @param @throws FileUploadException
    * @param @throws IOException 设定文件 
    * @return ArrayList<HashMap> HashMap中 包含oldName(文件上传时的名称),newName(文件保存在服务器的名称),savePath(文件保存路径)
    * @throws AppException 
    * @throws 
    * @author liubf
    * @date 2015年12月28日 上午11:01:12
    */
    public static ArrayList<HashMap> upload(HttpServletRequest request,String savePath,String tempPath)
    throws FileUploadException, IOException, AppException {
    ArrayList<HashMap> saveInfoList = new ArrayList<HashMap>();//保存上传文件信息
    SimpleDateFormat DateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSS");
    String timeStr = DateFormat.format(new Date());
    File repository = new File(tempPath);//缓存文件
    //创建一个磁盘文件工厂
    DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(5*1024*1024, repository);//缓存大小为5M
    ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory);
    fileUpload.setSizeMax(10*1024*1024);//设置上传文件的大小
    fileUpload.setHeaderEncoding("utf-8");//设置编码
    try {
    List<FileItem> fileList = fileUpload.parseRequest(request);
    for(FileItem item : fileList){
    HashMap<String, Object> fileInfoMap = new HashMap<String,Object>();
    if(item.isFormField()){//如果是表单数据,暂不处理
     request.setAttribute(item.getFieldName(), item.getString("utf-8"));//如果你页面编码是utf-8的 
    }else{//如果是文件 String fileName = item.getName();//上传时文件的名称 if(StringUtils.isEmpty(fileName)){ throw new AppException("上传文件不能为空!"); } int index = fileName.lastIndexOf("\"); if(-1 != index ){ fileName = fileName.substring(index+1); } InputStream inputStream = item.getInputStream();//输入流 Random random = new Random(); String saveName = timeStr+random.nextInt(10000)+fileName.substring(fileName.lastIndexOf("."));//文件保存的名字 File fileDir = new File(savePath); fileDir.mkdirs(); File saveFile = new File(fileDir, saveName); FileOutputStream outputStream = new FileOutputStream(saveFile); // 输入流转换成输出流输出到本地文件 int len = 0; byte[] b = new byte[1024]; while((len = inputStream.read(b))!=-1){ outputStream.write(b, 0, len); } inputStream.close(); outputStream.close(); //添加上传文件的信息以返回 fileInfoMap.put("oldName", fileName); fileInfoMap.put("newName", saveName); fileInfoMap.put("savePath", savePath+"/"+saveName); fileInfoMap.put("suffix", fileName.substring(fileName.lastIndexOf("."))); saveInfoList.add(fileInfoMap); } item.delete(); } } catch (FileUploadException e) { System.out.println("文件上传时发生错误!错误原因:" +e.getMessage()); throw e; } catch (IOException e) { System.out.println("读取文件信息时发生错误!错误原因:" +e.getMessage()); throw e; } return saveInfoList; } /** * * @Title: fileToStream * @Description: TODO(上传文件转换成输入流流,一次仅可以上传一个文件) * @param @param request * @param @param tempPath 文件缓存路径 * @param @return * @param @throws IOException 设定文件 * @return ArrayList<HashMap> HashMap中 包含oldName(文件上传时的名称),inputStream(文件转换为输入流),suffix(文件后缀名) * @throws AppException * @throws FileUploadException * @throws * @author liubf * @date 2015年12月28日 上午11:04:25 */ public static HashMap<String, Object> fileToStream(HttpServletRequest request,String tempPath) throws Exception { InputStream inputStream = null; HashMap<String, Object> resultMap = new HashMap<String, Object>(); File repository = new File(tempPath);//缓存文件 //创建一个磁盘文件工厂 DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(5*1024*1024, repository);//缓存大小为5M ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory); fileUpload.setSizeMax(10*1024*1024);//设置上传文件的大小 fileUpload.setHeaderEncoding("utf-8");//设置编码 try { List<FileItem> fileList = fileUpload.parseRequest(request); short fileSum = 0; for(FileItem item : fileList){ HashMap<String, Object> fileInfoMap = new HashMap<String,Object>(); if(item.isFormField()){//如果是表单数据,暂不处理 }else{//如果是文件 fileSum++; String fileName = item.getName(); if(StringUtils.isEmpty(fileName)){ throw new AppException("上传文件不能为空!"); } int index = fileName.lastIndexOf("\"); if(-1 != index ){ fileName = fileName.substring(index+1); } inputStream = item.getInputStream();//输入流 resultMap.put("oldName", fileName); resultMap.put("inputStream", inputStream); resultMap.put("suffix", fileName.substring(fileName.lastIndexOf("."))); } item.delete(); if(fileSum>1){ throw new AppException("上传的文件不能多于一个!"); } } } catch (FileUploadException e) { e.printStackTrace(); System.out.println("读取文件信息时发生错误!"); throw e; } return resultMap; } }
  • 相关阅读:
    删除链表中的一个节点
    链表系列面试题1
    线程的5种状态
    红黑树 实现
    Java的SPI机制浅析与简单示例
    socket原理
    rabbitmq简单介绍
    MongoTemplate操作mongodb
    RJava配置
    浅析前后台分离
  • 原文地址:https://www.cnblogs.com/mr-level/p/5089776.html
Copyright © 2011-2022 走看看