/java下载文件

Created Fri, 11 Nov 2022 11:14:15 +0900
250 Words

字节流

    public void FileDownload(String fileName, HttpServletResponse response) {
        FileInputStream fis = null;
        ByteArrayOutputStream bos = null;
        System.out.println(fileName);
        try {
            // 文件
            String fn = new StringBuilder("static/sampleFile/").append(fileName).toString();
            File file = new File(getClass().getClassLoader().getResource(fn).getFile());
//            InputStream inputStream = getClass().getClassLoader().getResourceAsStream(fn);
            // 文件转字节流
            byte[] fileByte = File2byteUtil.file2byte(file);
            // 字节流输出
            // utf-8文件头
//            response.getOutputStream().write(239);
//            response.getOutputStream().write(187);
//            response.getOutputStream().write(191);
            response.getOutputStream().write(fileByte);
            response.getOutputStream().flush();
            response.getOutputStream().close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

        }
    }

    public void FileDownload2(String fileName, HttpServletResponse response) {
        FileInputStream fis = null;
        ByteArrayOutputStream bos = null;
        try {
            // 文件
            String fn = new StringBuilder("static/sampleFile/").append(fileName).toString();
            System.out.println(fn);
            InputStream inputStream = getClass().getClassLoader().getResourceAsStream(fn);

            // 读取字节流
            byte[] b = new byte[2048];
            while (inputStream.read(b) != -1) {
                response.getOutputStream().write(b);
            }
            // 字节流输出
            // utf-8文件头
//            response.getOutputStream().write(239);
//            response.getOutputStream().write(187);
//            response.getOutputStream().write(191);
            response.getOutputStream().flush();
            response.getOutputStream().close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

        }
    }

第一种方式是把文件转换为byte传输,但是在线上达成jar包之后,通过文件路径就没办法获取到jar包内的静态文件。 因此用第二种方式,直接字节流读取字节流输出就可以了。