文件上传和下载

文件上传

private boolean uploadOriFile(MultipartFile multipartFile) throws IOException {
        String fileName = multipartFile.getOriginalFilename();
        int index = fileName.lastIndexOf(".");
        if (index == -1) {
            throw new RuntimeException("文件需要有后缀");
        }
        String suffix = fileName.substring(index + 1);
        if ("txt".equals(suffix)) {
            File file = new File(bizConfig.getFilePath(), multipartFile.getOriginalFilename());
            file.setReadable(true);
            file.setWritable(true);
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "utf-8");
            InputStream inputStream = multipartFile.getInputStream();
            ByteArrayOutputStream baos = cloneInputStream(inputStream);
            InputStream stream2 = new ByteArrayInputStream(baos.toByteArray());
            String charseName = EncodingDetectUtils.getBytesEncode(baos.toByteArray());
            log.info("上传的输入txt类型为:" + charseName);
            InputStreamReader inputStreamReader = new InputStreamReader(stream2, charseName);
            char[] buf = new char[1024];
            int len = 0;
            while ((len = inputStreamReader.read(buf)) != -1) {
                outputStreamWriter.write(buf, 0, len);
            }
            outputStreamWriter.close();
            inputStreamReader.close();
            return true;
        } else {
            File file = new File(bizConfig.getFilePath(), multipartFile.getOriginalFilename());
            file.setReadable(true);
            file.setWritable(true);
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            InputStream inputStream = multipartFile.getInputStream();
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
            byte[] buf = new byte[1024];
            int len = 0;
            while ((len = bufferedInputStream.read(buf)) != -1) {
                bufferedOutputStream.write(buf, 0, len);
            }
            bufferedInputStream.close();
            bufferedOutputStream.close();
            return true;
        }
    }

文件下载

public void downloadFile(Long fileId, HttpServletResponse response) {
        FileInfo fileInfo=fileInfoService.getById(fileId);
        String filepath=fileInfo.getFullName();
        //如果不为空则进行下载
        if(filepath!=null){
            File file=new File(filepath);
            //如果文件存在则进行下载
            if(file.exists()){
                //配置文件下载
                response.setHeader("content-type","application/octet-stream");
                response.setContentType("application/octet-stream");
                response.setCharacterEncoding("utf-8");
                response.setContentLength((int) file.length());
                //下载文件能正常显示中文
                try {
                    response.setHeader("Content-Disposition",
                            "attachment;filename="+ URLEncoder.encode(FilenameUtils.getName(filepath), "UTF-8"));
                } catch (UnsupportedEncodingException e) {
                    log.error(ExceptionUtils.getStackTrace(e));
                }
                //实现文件下载
                byte[] buffer=new byte[1024];
                FileInputStream fis=null;
                BufferedInputStream bis=null;
                try{
                    fis=new FileInputStream(file);
                    bis=new BufferedInputStream(fis);
                    OutputStream os=response.getOutputStream();
                    int i=bis.read(buffer);
                    while (i!=-1){
                        os.write(buffer,0,i);
                        os.flush();
                        i=bis.read(buffer);
                    }
                } catch (IOException e){
                    log.error(ExceptionUtils.getStackTrace(e));
                } finally {
                    if(bis!=null){
                        try {
                            bis.close();
                        } catch (IOException e) {
                            log.error(ExceptionUtils.getStackTrace(e));
                        }
                    }
                    if(fis!=null){
                        try {
                            fis.close();
                        } catch (IOException e) {
                            log.error(ExceptionUtils.getStackTrace(e));
                        }
                    }
                }
            }
        }
    }
posted @ 2020-05-07 16:06  Brunchz  阅读(130)  评论(0)    收藏  举报