Java文件上传下载删除(下载中文乱码问题)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36476972/article/details/78693653

单文件上传 (使用MultipartFile file参数)

/**
     * @Title: fileUpload 
     * @Description: 单文件上传  重命名随机字符串
     * @return String 
     * @author 
     * @date 
     */
    public static String fileUpload(MultipartFile file,HttpServletRequest request,HttpServletResponse response){
        //获取图片的原名字
        String oldName=file.getOriginalFilename();
        //原名称前拼接当前时间戳
        String newName=System.currentTimeMillis()+"_"+oldName;
        String path= "D:/uploadFile";
        //新建 uploadFile 文件夹    不存在就新建
        File parentPath=new File(path);
        if(!parentPath.exists()){
            parentPath.mkdirs();
        }
        String src="";
        try {
            file.transferTo(new File(parentPath,newName));
            File theFile=new File(parentPath+"/"+newName);
            if(theFile.exists()){
                //拼接图片的相对路径作为URL
                src="/"+newName;
            }else{
                src="";
            }
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return src;
    }

多文件上传 (使用MultipartFile[] files 参数)

/**
     * @Title: FilesUpload 
     * @Description: 多文件上传   名字拼接字符串
     * @return List<String> 
     * @author 
     * @date
     */
    public static List<String> filesUpload(MultipartFile[] files,HttpServletRequest request,HttpServletResponse response){
        List<String> urlList=new ArrayList<>();
        if(files!=null&&files.length>0){
            String path= "D:/uploadFile";
            //新建 uploadFile 文件夹    不存在就新建
            File parentPath=new File(path);
            if(!parentPath.exists()){
                parentPath.mkdirs();
            }
            String folderName=System.currentTimeMillis()+"";
            File folder=new File(path+"/"+folderName);
            //文件夹不存在新建
            if(!folder.exists()){
                folder.mkdirs();
            }
            for(int i=0;i<files.length;i++){
                MultipartFile file=files[i];
                //当前时间戳拼接文件名
                String fileName=folderName+file.getOriginalFilename();
                try {
                    file.transferTo(new File(folder,fileName));
                    File theFile=new File(folder+"/"+fileName);
                    if(theFile.exists()){
                        String url=folderName+"/"+fileName;
                        urlList.add(url);
                    }
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return urlList;
        }else{
            return urlList;
        }
    }

简单删除上传文件

/**
     * @Title: deleteFile 
     * @Description: 删除文件
     * @return Map<String,Object> 
     * @author
     * @date
     */
    public static Map<String,Object> deleteFile(String path){
        Map<String,Object> map=new HashMap<>();
        String filePath="D:/uploadFile"+path;
        System.out.println(filePath);
        File file=new File(filePath);
        if(file.exists()){
            file.delete();
            File file1=new File(filePath);
            if(file1.exists()){
                map.put("status","error");
                map.put("msg","文件删除失败!");
            }else{
                map.put("status","ok");
                map.put("msg","文件已删除!");
            }
        }else{
            map.put("status","error");
            map.put("msg","文件不存在!");
        }
        return map;
    }

文件下载 (针对于火狐中文乱码、空格转换)

火狐使用编码 new String(fileName.getBytes(“GB2312”),”ISO-8859-1”);

/**
     * @Title: checkFile 
     * @Description: 检测文件是否存在
     * @return Map<String,Object> 
     * @author 
     * @date
     */
    @RequestMapping(value="checkFile",method={RequestMethod.GET,RequestMethod.POST})
    @ResponseBody
    public static Map<String,Object> checkFile(@Param("fileName")String fileName){
        Map<String,Object> map=new HashMap<>();
        String path="D:/uploadFile"+fileName;
        File file=new File(path);
        //文件不存在
        if(!file.exists()){
            map.put("status","error");
            map.put("msg", "文件不存在!");
        }else{
            map.put("status","ok");
            map.put("url", "fileDownload?fileName="+fileName);
        }
        return map;
    }


/**
     * @Title: fileDownload
     * @Description: 文件下载
     * @return Map<String,Object> 
     * @author
     * @date 
     */
    @RequestMapping(value="fileDownload",method={RequestMethod.GET,RequestMethod.POST})
    public static void fileDownload(String fileName,HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException, FileNotFoundException{
            String path="D:/uploadFile"+fileName;
            try {  
                // path是指欲下载的文件的路径。  
                File file = new File(path);  
                // 取得文件名。  
                String filename = file.getName(); 
                // 以流的形式下载文件。  
                InputStream fis = new BufferedInputStream(new FileInputStream(path));  
                byte[] buffer = new byte[fis.available()];  
                fis.read(buffer);  
                fis.close();  
                // 清空response  
                response.reset();  
                // 设置response的Header   
                String realName=filename.substring(filename.indexOf("_")+2,filename.length());
                //判断浏览器是否为火狐
                if ("FF".equals(getBrowser(request))) {  
                    // 火狐浏览器 设置编码new String(realName.getBytes("GB2312"), "ISO-8859-1");
                    realName = new String(realName.getBytes("GB2312"), "ISO-8859-1");  
                }else{
                    realName = URLEncoder.encode(realName, "UTF-8");//encode编码UTF-8 解决大多数中文乱码
                    realName = realName.replace("+", "%20");//encode后替换空格  解决空格问题
                }
                response.addHeader("Content-Disposition", "attachment;filename="+realName+"");  
                response.addHeader("Content-Length", "" + file.length());  
                OutputStream toClient = new BufferedOutputStream(response.getOutputStream());  
                response.setContentType("application/octet-stream");  
                toClient.write(buffer);  
                toClient.flush();  
                toClient.close();  
            } catch (IOException ex) {  
                ex.printStackTrace();  
            }  
    }


    /**
      * @Title: getBrowser 
      * @Description: 判断客户端浏览器
      * @return String 
      * @author
      * @date
      */
    private static String getBrowser(HttpServletRequest request) {  
        String UserAgent = request.getHeader("USER-AGENT").toLowerCase();  
        if (UserAgent != null) {  
             if (UserAgent.indexOf("msie") != -1)  
                return "IE";  
            if (UserAgent.indexOf("firefox") != -1)  
                return "FF";  
            if (UserAgent.indexOf("safari") != -1)  
                return "SF";  
        }  
        return null;  
    }

END.

猜你喜欢

转载自blog.csdn.net/qq_36476972/article/details/78693653