pdf.js實現加載遠程pdf和本地文件pdf(不是在webapp下),完美解決跨域問題

目標文件:遠程pdf文件和本地文件(不是放在webapp下的文件,是電腦任意磁盤上的本地文件)

解決思路:

       1.都是以文件流的形式來進行加載pdf文檔,完美解決跨域問題

       2.寫一個servlet,將文件流輸出,瀏覽器可直接打開,展示該pdf

注意: 至於pdf.js插件的使用,上官網即可,我不做過多解釋了,網上也有很多

前端展示:http://localhost:6443/web/PDFDemo/pdfjs/generic/web/viewer.html?file=URL

其中URL=你寫的servlet的鏈接

加載遠程文件 java servlet代碼:

package main;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

@WebServlet(name = "Convert")
public class Convert extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("application/pdf");
        response.setHeader("Access-Control-Allow-Origin", "*"); // 解決請求頭跨域問題
        ServletOutputStream sos = response.getOutputStream();
        //這裏的 destUrl目前是固定的,實際應用中需要動態獲取
        String destUrl = "http://39.107.117.248/pdf-store/caseFile_origin.pdf"; // 遠程文件途徑,這是我放在遠程服務器的
        //tomcat /webapp下的文件,該鏈接可通過瀏覽器直接打開,你可以用它來進行測試;
        URL url = new URL(destUrl);
        HttpURLConnection httpUrl = (HttpURLConnection)url.openConnection();
        // 連接指定的網絡資源
        httpUrl.connect();
        // 獲取網絡輸入流
        BufferedInputStream bis = new BufferedInputStream(httpUrl.getInputStream());
        int b;
        while ((b = bis.read())!= -1){
            sos.write(b);
        }
        sos.close(); // 這裏有點和c語言裏的讀取文件有點像
        bis.close();
    }
}

加載本地文件 java servlet 代碼:

package main;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

@WebServlet(name = "ConvertLocal")
public class ConvertLocal extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String fileName = request.getParameter("fileName");
        response.setHeader("Access-Control-Allow-Origin", "*"); // 解決請求頭跨域問題
        response.setContentType("application/pdf");
        File f1 = new File("E:\\testfiles-pdf\\"+fileName);
        FileInputStream reader= new FileInputStream(f1);
        BufferedInputStream BufferReader = new BufferedInputStream(reader);
       // 創建servlet 輸出流對象
        ServletOutputStream sos = response.getOutputStream();


        int b;
        while ((b = BufferReader.read())!= -1){
            sos.write(b);
        }
        sos.close(); // 這裏有點和c語言裏的讀取文件有點像
        reader.close();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章