JSP程式中response物件實現檔案下載的兩種方式
這篇文章主要介紹了JSP隱含物件response實現檔案下載的兩種方法,很簡單,但很實用,需要的朋友可以參考下。
一.JSP隱含物件response實現檔案下載的介紹
(1)在JSP中實現檔案下載最簡單的方法是定義超連結指向目標資源,使用者單擊超連結後直接下載資源,但直接暴露資源的URL
也會帶來一些負面的影響,例如容易被其它網站盜鏈,造成本地伺服器下載負載過重。
(2)另外一種下載檔案的方法是使用檔案輸出流實現下載,首先通過response報頭告知客戶端瀏覽器,將接收到的資訊另存
為一個檔案,然後用輸出流物件給客戶端傳輸檔案資料,瀏覽器接收資料完畢後將資料另存為檔案,這種下載方法的優點是服
務器端資源路徑的保密性好,並可控制下載的流量以及日誌登記等。
二.以下介紹兩種檔案的下載方式
(1)二進位制檔案的下載
用JSP程式下載二進位制檔案的基本原理是:首先將原始檔封裝成位元組輸入流物件,通過該物件讀取檔案資料,獲取response物件的位元組輸出流物件,通過輸出流物件將二進位制的位元組資料傳送給客戶端。
1.把原始檔封裝成位元組輸入流物件
2.讀取二進位制位元組資料並傳輸給客戶端
程式碼如下:
<%@ page contentType="application/x-download" import="java.io.*" %>
<%
int status=0;
byte b[]=new byte[1024];
FileInputStream in=null;
ServletOutputStream out2=null;
try
{
response.setHeader("content-disposition","attachment; filename=d.zip");
in=new FileInputStream("c:\\tomcat\\webapps\\ROOT\\d.zip");
out2=response.getOutputStream();
while(status != -1 )
{
status=in.read(b);
out2.write(b);
}
out2.flush();
}
catch(Exception e)
{
System.out.println(e);
response.sendRedirect("downError.jsp");
}
finally
{
if(in!=null)
in.close();
if(out2 !=null)
out2.close();
}
%>
(2)文字檔案下載
文字檔案下載時用的是字元流,而不是位元組流。首先取得原始檔的字元輸入流物件,用java.io.FileReader類封裝,
再把FileReader物件封裝為java.io.BufferedReader,以方便從文字檔案中一次讀取一行。字元輸出流直接用JSP的隱
含物件out,out能夠輸出字元資料。
程式碼如下:
<%@ page contentType="application/x-download" import="java.io.*" %><%
int status=0;
String temp=null;
FileReader in=null;
BufferedReader in2=null;
try
{
response.setHeader("content-disposition","attachment; filename=ee.txt");
response.setCharacterEncoding("gb2312");
in=new FileReader("c:\\tomcat\\webapps\\ROOT\\ee.txt");
in2=new BufferedReader(in);
while((temp=in2.readLine()) != null )
{
out.println(temp);
}
out.close();
}
catch(Exception e)
{
System.out.println(e);
response.sendRedirect("downError.jsp");
}
finally
{
if(in2!=null)
in2.close();
}
%>
相關推薦
JSP程式中response物件實現檔案下載的兩種方式
這篇文章主要介紹了JSP隱含物件response實現檔案下載的兩種方法,很簡單,但很實用,需要的朋友可以參考下。 一.JSP隱含物件response實現檔案下載的介紹 (1)在JSP中實現檔案下載最簡單的方法是定義超連結指向目標資源,使用者單擊超連結後直接下載資源,但直接暴露資源的URL 也
Spring-boot中讀取config配置檔案的兩種方式
瞭解過spring-Boot這個技術的,應該知道Spring-Boot的核心配置檔案application.properties,當然也可以通過註解自定義配置檔案的資訊。 Spring-Boot讀取配置檔案的方式: 一.讀取核心配置檔案資訊application.p
HttpServletResponse物件實現檔案下載
檔案下載在我們的專案中是很常見的需求,實現檔案下載功能的方式有很多,spring-mvc框架也提供了檔案下載的功能。我們本次探討的功能是利用HttpServletResponse物件來實現檔案下載的功能。 思路如下: (1)獲取檔案位置路徑 (2)獲取檔名
javascript 面向物件(實現繼承的幾種方式)
1、原型鏈繼承 核心: 將父類的例項作為子類的原型 缺點: 父類新增原型方法/原型屬性,子類都能訪問到,父類一變其它的都變了 function Person (name) { this.name =
Spark中RDD轉換成DataFrame的兩種方式(分別用Java和scala實現)
一:準備資料來源 在專案下新建一個student.txt檔案,裡面的內容為: print? <code class="language-java">1,zhangsan,20 2,lisi,21 3,wanger,1
前端資料流檔案下載三種方式
1、直接使用get請求方式進行下載: window.open(`${url}?${qs.stringify(param)}`, '_blank'); 2、使用form 表單post請求進行下載: const postDownloadFile = (action, param) =>
Ajax使用FormData物件上傳檔案的兩種方式
以下是Demo的專案結構:主要就是一個servlet3.0和一個jsp頁面 由於使用的是servlet3.0,所以無需配置web.xml,以下是idnex.jsp頁面: <%@ page language="java" contentType="
在Liferay中的下載--兩種方式
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="
FreeMarker中引入公共檔案的兩種方式
這裡簡單敘述了一下<#include/>和<#import/>的用法 首先是自定義的工具類FreeMarkerUtil.java package com.jadyer.util; import java.io.BufferedWriter
CSS3實現動畫的兩種方式
logs del pin 屬性 cnblogs ase http eve 括號 1、設置transition設置過渡,添加transform設置形狀,形成動畫效果,如下: .divadd { transition: All 0.4s ease-in-out;
java中數組復制的兩種方式
ava log brush class div 方法 () print str 在java中數組復制有兩種方式: 一:System.arraycopy(原數組,開始copy的下標,存放copy內容的數組,開始存放的下標,需要copy的長度); 這個方法需要先創建一個空的
spring boot中讀取配置文件的兩種方式
www con one -s 讀取配置文件 測試 spa span ati application.properties test.name=測試 test.url=www.test.com 1.@Value註解 在controller裏可以這樣直接調用 @Value
JDBC中Oracle的SID和ServiceName兩種方式的連接字符串格式
bottom none color bubuko div nbsp rac 字符串 padding SID格式: jdbc:oracle:thin:@<host>:<port>:<SID> 如: jdbc:oracle:thin:@19
css實現透明的兩種方式及其區別
白色 class 子節點 new 透明度 區別 方式 ron pre 一、opacity:0~1 值越高,透明度越低,下面為示例 選擇器{ opacity:0.5 } 選擇器匹配到的節點們,包括節點們的孩子節點,都會實現%50透明,另 0.5 可直
beans.xml引入.properties檔案的兩種方式
方法一: <context:property-placeholder location="classpath:config.properties"/> 方法二: <bean class="org.springframework.beans.factory.con
python 讀取wav 音訊檔案的兩種方式
python 中,常用的有兩種可以讀取wav音訊格式的方法,如下所示: 1 import scipy 2 from scipy.io import wavfile 3 4 import soundfile as sf 5 6 fs,data = wavfile.read(
python中多執行緒開啟的兩種方式(內含有event的應用,即安全的機制,類似於java的等待喚醒機制,不會出現多個執行緒之間的錯亂問題)
event是類似於java中的等待喚醒機制,具體方法參照上一篇CSDN 下面來介紹開啟執行緒的第一種方式 #Filename:threading1.py #開啟執行緒的第一種方式 import threading import time event=threadin
HttpClient 傳輸檔案的兩種方式
1. org.apache.commons.httpclient.HttpClient package com.skd.util; import com.skd.common.Constant; import com.skd.common.Event; import org.apa
js 圖片base64轉file檔案的兩種方式
最近專案中需要實現把圖片的base64編碼轉成file檔案的功能,然後再上傳至伺服器。起初是直接通過new File()的方式進行轉換,在各個主流的瀏覽器基本上都支援,Android也沒問題,但是在ios系統埋了個坑,ios11.4以下的系統上傳失敗。定位bu
實現AJAX的兩種方式
第一種通過XMLHttpRequest實現: 需要手動建立XMLHttpRequest物件,較繁瑣。 js程式碼: <script type="text/javascript"> function getComments(){ //獲得評論框內