zoukankan      html  css  js  c++  java
  • 文件上传下载

    package cn.edu.hbcf.common.utils;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Date;
    import java.util.UUID;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.io.FileUtils;
    import org.apache.commons.io.IOUtils;
    import org.apache.commons.lang.StringUtils;
    import org.apache.commons.lang.time.DateFormatUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.multipart.MultipartFile;
    
    import cn.edu.hbcf.common.jackjson.JackJson;
    import cn.edu.hbcf.common.vo.ExtReturn;
    
    public class FileDownLoadUtils {
        private static final Logger logger = LoggerFactory.getLogger(FileUtils.class);
        /**
         * 
         * @param filePath
         * @param fileName
         * @param response
         */
        public static void  downloadFile(String filePath,String fileName,HttpServletResponse response){
            InputStream input = null;
            ServletOutputStream output = null;
            try {
                File downloadFile = new File(filePath);
                // 判断文件夹是否存在,不存在则创建
                if (!downloadFile.getParentFile().exists()) {
                    downloadFile.getParentFile().mkdirs();
                }
                // 判断是否存在这个文件
                if (!downloadFile.isFile()) {
                    // 创建一个
                    FileUtils.touch(downloadFile);
                }           
            
                //response.setContentType("application/octet-stream;charset=UTF-8");
                response.setContentType("application/x-download");  
                response.setCharacterEncoding("UTF-8");
               
    //            response.setHeader("content-disposition", "attachment; filename=" + URLEncoder.encode(fileName,"UTF-8"));
              //解决中文乱码  
                response.setHeader("Content-Disposition","attachment;filename="+new String(fileName.getBytes("UTF-8"),"iso-8859-1").replace(" ", "_"));  
    
                input = new FileInputStream(downloadFile);
                output = response.getOutputStream();
                IOUtils.copy(input, output);
                
            } catch (Exception e) {
                logger.error("Exception: ", e);
            } finally {
                
                    try {
                        if(output != null){
                            output.flush();
                            output.close();
                        }
                        if(input != null){
                            input.close();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                
    //            IOUtils.closeQuietly(output);
    //            IOUtils.closeQuietly(input);
            }
        }
        
        
    
        public static String fileUpload(MultipartFile file, HttpServletRequest request,String saveFolder,long maxSize){
            String returnMsg  = null;
            try {
                
                // 保存的地址
                String savePath = request.getSession().getServletContext().getRealPath("/"+saveFolder);
                if(maxSize!=0 && file.getSize()>maxSize){
                    returnMsg = JackJson.fromObjectToJson(new ExtReturn(false, "文件大小超过了"+maxSize/(1024*1024)+"M了,上传失败!"));
                    return returnMsg;
                }
                // 上传的文件名 //需要保存
                String uploadFileName = file.getOriginalFilename();
                // 获取文件后缀名 //需要保存
                String fileType = StringUtils.substringAfterLast(uploadFileName, ".");
                // 以年月/天的格式来存放
                String dataPath = DateFormatUtils.format(new Date(), "yyyy-MM" + File.separator + "dd");
                // uuid来保存不会重复
                String saveName = UUID.randomUUID().toString().replace("-", "");
                // 最终相对于upload的路径,解决没有后缀名的文件 //需要保存
                // 为了安全,不要加入后缀名
                // 2011-1218364b45f-244d-41b6-bbf4-8df32064a935,等下载的的时候在加入后缀名
                String finalPath = File.separator + dataPath + File.separator + saveName + ("".equals(fileType) ? "" : "." + fileType);
                logger.debug("savePath:{},finalPath:{}", new Object[] { savePath, finalPath });
                File saveFile = new File(savePath + finalPath);
                // 判断文件夹是否存在,不存在则创建
                if (!saveFile.getParentFile().exists()) {
                    saveFile.getParentFile().mkdirs();
                }
                // 写入文件
                FileUtils.writeByteArrayToFile(saveFile, file.getBytes());
                // 保存文件的基本信息到数据库
                StringBuffer buffer = new StringBuffer();
                buffer.append("{success:true,fileInfo:{'fileName':'").append(uploadFileName).append("',");
                buffer.append("'filePath':'").append(savePath.replace("\", "/")+finalPath.replace("\", "/")).append("',");          
                buffer.append("'projectPath':'").append(saveFolder.replace("\", "/")).append(finalPath.replace("\", "/")).append("',");
                buffer.append("'storeName':'").append(saveName + ("".equals(fileType) ? "" : "." + fileType));
                buffer.append("'}}");
                returnMsg = buffer.toString();
                
            } catch (Exception e) {
                logger.error("Exception: ", e);
            }
            return returnMsg;
        }
        
        public static File upload(MultipartFile file,String saveFolder){
             File f = null;
             try {
                // 上传的文件名 //需要保存
                String uploadFileName = file.getOriginalFilename();
                // 获取文件后缀名 //需要保存
                String fileType = StringUtils.substringAfterLast(uploadFileName, ".");
                // 以年月/天的格式来存放
    //            String dataPath = DateFormatUtils.format(new Date(), "yyyy-MM" + File.separator + "dd");
                // uuid来保存不会重复
                String saveName = UUID.randomUUID().toString().replace("-", "");
                // 最终相对于upload的路径,解决没有后缀名的文件 //需要保存
                // 为了安全,不要加入后缀名
                // 2011-1218364b45f-244d-41b6-bbf4-8df32064a935,等下载的的时候在加入后缀名
                String finalPath = saveFolder + saveName + ("".equals(fileType) ? "" : "." + fileType);
                logger.debug("finalPath:{}", new Object[] {  finalPath });
                File saveFile = new File(finalPath);
                // 判断文件夹是否存在,不存在则创建
                if (!saveFile.getParentFile().exists()) {
                    saveFile.getParentFile().mkdirs();
                }
                // 写入文件
                FileUtils.writeByteArrayToFile(saveFile, file.getBytes());
        
                f = new File(finalPath.replace("\", "/"));
            } catch (Exception e) {
                logger.error("Exception: ", e);
            }
            return f;
        }
    
        public static File upload(MultipartFile file, HttpServletRequest request,String saveFolder){
            File f = null;
            try {
                
                // 保存的地址
                String savePath = request.getSession().getServletContext().getRealPath("/");
                if(saveFolder != null){
                      savePath += saveFolder;
                }
                // 上传的文件名 //需要保存
                String uploadFileName = file.getOriginalFilename();
                // 获取文件后缀名 //需要保存
                String fileType = StringUtils.substringAfterLast(uploadFileName, ".");
                // 以年月/天的格式来存放
           //    String dataPath = DateFormatUtils.format(new Date(), "yyyy-MM" + File.separator + "dd");
                // uuid来保存不会重复
                String saveName = UUID.randomUUID().toString().replace("-", "");
                // 最终相对于upload的路径,解决没有后缀名的文件 //需要保存
                // 为了安全,不要加入后缀名
                // 2011-1218364b45f-244d-41b6-bbf4-8df32064a935,等下载的的时候在加入后缀名
                String finalPath =  File.separator + saveName + ("".equals(fileType) ? "" : "." + fileType);
                logger.debug("savePath:{},finalPath:{}", new Object[] { savePath, finalPath });
                f = new File(savePath + finalPath);
                // 判断文件夹是否存在,不存在则创建
                if (!f.getParentFile().exists()) {
                    f.getParentFile().mkdirs();
                }
                // 写入文件
                FileUtils.writeByteArrayToFile(f, file.getBytes());
     
              //  f = new File(savePath.replace("\", "/")+finalPath.replace("\", "/"));
            } catch (Exception e) {
                logger.error("Exception: ", e);
            }
            return f;
        }
    
        /**
         * 创建文件夹
         * @param request
         * @param saveFolder
         * @return
         */
        public static File createFile(HttpServletRequest request,String saveFolder){
            // 保存的地址
            String savePath = request.getSession().getServletContext().getRealPath("/");
            if(saveFolder != null){
                  savePath += saveFolder;
            }
            File file=new File(savePath);
         // 判断文件夹是否存在,不存在则创建
            if (!file.exists()) {
                file.mkdirs();
            }
            return file;
        }
    }
  • 相关阅读:
    [编程题] 数组中重复的数字
    [编程题] 用两个栈实现队列
    杜教筛学习笔记
    二次剩余学习小记
    Burnside引理和Polya定理简单入门
    6553. 【GDOI2020模拟4.11】人生
    6545. 【GDOI2020模拟4.8】 Exercise
    2020.4.5学军信友队趣味网络邀请赛总结
    51 Nod 1287 加农炮(单调队列思想+二分)
    51 Nod 1070 Bash游戏v4(斐波那契博弈)
  • 原文地址:https://www.cnblogs.com/zrui-xyu/p/4942782.html
Copyright © 2011-2022 走看看