(1).框架爲SSH:html
xml配置:(blank.jsp頁面是啥都沒有,徹底一個空白頁面)java
<!-- 發文管理詳細信息,顯示PDF發文 --> <action name="showPdf" method="showPdf" class="standard-fileDataAction"> <result name="success" > /blank.jsp </result> </action>
JAVA後臺:web
public String showPdf() throws IOException{ FileData fileData = fileDataService.getById(id); byte[] bit = fileData.getData(); if(bit != null){ HttpServletResponse response = ServletActionContext.getResponse(); response.setContentLength(bit.length); response.setContentType("application/pdf;charset=UTF-8"); OutputStream test = response.getOutputStream(); DataOutput output = new DataOutputStream(test); for( int i = 0; i < bit.length; i++ ) { output.writeByte(bit[i] ); } test.flush(); test.close(); test=null; response.flushBuffer(); } return ActionSupport.SUCCESS; }
JSP頁面請求:數據庫
./iface/showPdf?id="+fileDataObject.getId()
(2)這個測試可行,在網上也搜索了其餘的一些用法,不過沒有測試過:app
把PDF文檔經過JSP頁面展現給用戶。主要使用Object標籤來實現的。框架
<html> <head> <title>Insert title here</title> </head> <body> <% String docPath = request.getParameter("docPath ") == null ? "": request.getParameter("docPath "); %> <object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="990" height="700" border="0" top="-10" name="pdf"> <param name="toolbar" value="false"> <param name="_Version" value="65539"> <param name="_ExtentX" value="20108"> <param name="_ExtentY" value="10866"> <param name="_StockProps" value="0"> <!-- 下面是指明你的PDF文檔所在地,相對於發佈web目錄 --> <param name="SRC" value="<%=docPath%>"> </object> </body> </html>
(3)利用java讀取某個路徑下的pdf文件,並在JSP頁面打開:jsp
response.setContentType("application/pdf"); FileInputStream in = new FileInputStream(new File("d:/1.pdf")); OutputStream out = response.getOutputStream(); byte[] b = new byte[512]; while ((in.read(b)) != -1) { out.write(b); } out.flush(); in.close(); out.close();
解釋下MYSQL中BLOB類型的字段:用於存儲二進制數據(利用inputStream來讀取文件實際上也是獲取文件的二進制數據,和在數據庫中獲取blob字段值是同樣的)測試
MySQL中,BLOB是個類型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,這幾個類型之間的惟一區別是在存儲文件的最大大小上不一樣。編碼
MySQL的四種BLOB類型
類型 大小(單位:字節)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4Gspa
解釋下字節流:
字節流是由字節組成的,字符流是由字符組成的. Java裏字符由兩個字節組成.字節流是最基本的,全部的InputStream和OutputStream的子類都是,主要用在處理二進制數據,它是按字節來處理的但實際中不少的數據是文本,又提出了字符流的概念,它是按虛擬機的encode來處理,也就是要進行字符集的轉化。在從字節流轉化爲字符流時,實際上就是byte[]轉化爲String時,public String(byte bytes[], String charsetName)有一個關鍵的參數字符集編碼,一般咱們都省略了,那系統就用操做系統默認的lang