亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JAVA返回PDF文件流并進(jìn)行下載的實(shí)現(xiàn)方法

 更新時(shí)間:2024年02月03日 11:52:00   作者:itHarvie  
這篇文章主要給大家介紹了關(guān)于JAVA返回PDF文件流并進(jìn)行下載的實(shí)現(xiàn)方法,PDF文件流下載是通過(guò)HTTP協(xié)議將服務(wù)器上的PDF文件以流的方式發(fā)送給客戶端,供客戶端保存到本地磁盤(pán)或直接在瀏覽器中打開(kāi),需要的朋友可以參考下

首先確保本地存放pdf 保證通過(guò)路徑可以拿到文件 我這邊把pdf放在e盤(pán)下的目錄

1.前臺(tái)方法

原生ajax 發(fā)送請(qǐng)求返回文件流進(jìn)行下載

 function downloadPdf() {
        //后臺(tái)下載文件流地址 (自己定義)
        let url = prefix + "/result";
        let xhr = new XMLHttpRequest();
        xhr.open('GET', url, true);
        xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
        xhr.responseType = 'blob'; //返回類型blob
        //定義請(qǐng)求完成的處理函數(shù),請(qǐng)求前也可以增加加載框/禁用下載按鈕邏輯
        xhr.onload = function (res) {
            //請(qǐng)求完成
            let blob = this.response;
            let reader = new FileReader();
            reader.readAsDataURL(blob)
            reader.onload = function (e) {
                //創(chuàng)建a標(biāo)簽 模擬點(diǎn)擊事件下載文件流
                const object = document.createElement('a');
                //下載的pdf名稱
                object.download = '阿里巴巴Java開(kāi)發(fā)手冊(cè)終極版v1.3.0.pdf';
                object.href = e.target.result;
                $("body").append(object);    // 修復(fù)firefox中無(wú)法觸發(fā)click
                object.click();
                $(object).remove();
            }
        }
        // 發(fā)送ajax請(qǐng)求
        xhr.send()
    }

2.后臺(tái)方法

  @GetMapping("/result")
    public void result(HttpServletRequest request, HttpServletResponse response) throws IOException {
		//你的文件所存放的地址 我這邊放在e盤(pán)下
        String pdfPath = "E:/阿里巴巴Java開(kāi)發(fā)手冊(cè)終極版v1.3.0.pdf";
        response.setCharacterEncoding("utf-8");
        response.setContentType("multipart/form-data");
        response.setHeader("Content-Disposition", "xxx.pdf");
        FileUtils.writeBytes(pdfPath, response.getOutputStream());
        File file = new File(pdfPath);
        if (file.exists()) {
            DataOutputStream temps = new DataOutputStream(response.getOutputStream());
            DataInputStream in = new DataInputStream(new FileInputStream(pdfPath));
            byte[] b = new byte[2048];
            while ((in.read(b)) != -1) {
                temps.write(b);
                temps.flush();
            }
            in.close();
            temps.close();
        } else {
            log.error("文件不存在!");
        }
    }
 /**
     * 輸出指定文件的byte數(shù)組
     * 
     * @param filePath 文件路徑
     * @param os 輸出流
     * @return
     */
    public static void writeBytes(String filePath, OutputStream os) throws IOException
    {
        FileInputStream fis = null;
        try
        {
            File file = new File(filePath);
            if (!file.exists())
            {
                throw new FileNotFoundException(filePath);
            }
            fis = new FileInputStream(file);
            byte[] b = new byte[1024];
            int length;
            while ((length = fis.read(b)) > 0)
            {
                os.write(b, 0, length);
            }
        }
        catch (IOException e)
        {
            throw e;
        }
        finally
        {
            if (os != null)
            {
                try
                {
                    os.close();
                }
                catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }
            if (fis != null)
            {
                try
                {
                    fis.close();
                }
                catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }
        }
    }

補(bǔ)充:JAVA下載PDF 到本地 或 返回文件流

@Slf4j
public class PDFUtils {
    /**
     *
     * @param fileUrl 文件路徑
     * @param saveUrl  文件保存路徑
     * @param fileName  文件名稱
     * @throws IOException
     */
    public static void downloadPdf(String fileUrl, String saveUrl, String fileName) throws IOException {
        URL url = new URL(fileUrl);
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        //設(shè)置超時(shí)間為3秒
        conn.setConnectTimeout(5*1000);
        //防止屏蔽程序抓取而返回403錯(cuò)誤
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        //得到輸入流
        InputStream inputStream = conn.getInputStream();
        //獲取自己數(shù)組
        byte[] getData = readInputStream(inputStream);
        //文件保存位置
        File saveDir = new File(saveUrl);
        if(!saveDir.exists()){
            saveDir.mkdir();
        }
        File file = new File(saveDir+File.separator+fileName);
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(getData);
        if(fos!=null){
            fos.close();
        }
        if(inputStream!=null){
            inputStream.close();
        }
        System.out.println("info:"+url+" download success");
    }
    /**
     * 從輸入流中獲取字節(jié)數(shù)組
     * @param inputStream
     * @return
     * @throws IOException
     */
    public static  byte[] readInputStream(InputStream inputStream) throws IOException {
        byte[] buffer = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while((len = inputStream.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bos.close();
        return bos.toByteArray();
    }
    /**
     * 下載pdf返回文件流
     * @param response 請(qǐng)求頭
     * @param pdfName fileName
     * @param path    路徑
     */
    public static void toDownload(HttpServletResponse response, String pdfName,String path)  {
        ServletOutputStream out = null;
        InputStream inputStream = null;
        try {
            // 獲取外部文件流
            log.info("下載中------invPdfUrl=" +path);
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(3 * 1000);
            //防止屏蔽程序抓取而返回403錯(cuò)誤
            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            inputStream = conn.getInputStream();
            /**
             * 輸出文件到瀏覽器
             */
            int len = 0;
            // 輸出 下載的響應(yīng)頭,如果下載的文件是中文名,文件名需要經(jīng)過(guò)url編碼
            response.setContentType("text/html;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(pdfName, "UTF-8"));
            response.setHeader("Cache-Control", "no-cache");
            out = response.getOutputStream();
            byte[] buffer = new byte[1024];
            while ((len = inputStream.read(buffer)) > 0) {
                out.write(buffer, 0, len);
            }
            out.flush();
            log.info("pdf文件下載完成.....");
        } catch (Exception e) {
            log.error("pdf文件下載異常,e = {}", e);
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (Exception e) {
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (Exception e) {
                }
            }
        }
    }
}

總結(jié) 

到此這篇關(guān)于JAVA返回PDF文件流并進(jìn)行下載的文章就介紹到這了,更多相關(guān)JAVA返回PDF文件流并下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論