亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

java語言

JSP頁面如何實現(xiàn)文件上傳下載

時間:2024-09-23 01:38:50 java語言 我要投稿
  • 相關推薦

JSP頁面如何實現(xiàn)文件上傳下載

  Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用于PC、數(shù)據(jù)中心、游戲控制臺、科學超級計算機、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。下面,小編為大家搜索整理了JSP頁面如何實現(xiàn)文件上傳下載,希望能給大家?guī)韼椭?更多精彩內(nèi)容請及時關注我們應屆畢業(yè)生考試網(wǎng)!

  名稱:jsp頁面上傳類

  作者:SinNeR

  Mail:vogoals[at]hotmail.com

  特點:

  可以多文件上傳;

  返回上傳后的文件名;

  form表單中的其他參數(shù)也可以得到。

  先貼上傳類,JspFileUpload

  package com.vogoal.util;

  import java.io.BufferedOutputStream;

  import java.io.File;

  import java.io.FileOutputStream;

  import java.io.IOException;

  import java.text.SimpleDateFormat;

  import java.util.ArrayList;

  import java.util.Date;

  import java.util.Hashtable;

  import javax.servlet.ServletInputStream;

  import javax.servlet.http.HttpServletRequest;

  /*

  * vogoalAPI 1.0

  * Auther SinNeR@blueidea.com

  * by vogoal.com

  * mail: vogoals@hotmail.com

  */

  /**

  * JSP上傳文件類

  *

  * @author SinNeR

  * @version 1.0

  */

  public class JspFileUpload {

  /** request對象 */

  private HttpServletRequest request = null;

  /** 上傳文件的路徑 */

  private String uploadPath = null;

  /** 每次讀取得字節(jié)的大小 */

  private static int BUFSIZE = 1024 * 8;

  /** 存儲參數(shù)的Hashtable */

  private Hashtable paramHt = new Hasptable();

  /** 存儲上傳的文件的文件名的ArrayList */

  private ArrayList updFileArr = new ArrayList();

  /**

  * 設定request對象。

  *

  * @param request

  * HttpServletRequest request對象

  */

  public void setRequest(HttpServletRequest request) {

  this.request = request;

  }

  /**

  * 設定文件上傳路徑。

  *

  * @param path

  * 用戶指定的文件的上傳路徑。

  */

  public void setUploadPath(String path) {

  this.uploadPath = path;

  }

  /**

  * 文件上傳處理主程序。

  *

  * @return int 操作結果 0 文件操作成功;1 request對象不存在。 2 沒有設定文件保存路徑或者文件保存路徑不正確;3

  * 沒有設定正確的enctype;4 文件操作異常。

  */

  public int process() {

  int status = 0;

  // 文件上傳前,對request對象,上傳路徑以及enctype進行check。

  status = preCheck();

  // 出錯的時候返回錯誤代碼。

  if (status != 0)

  return status;

  try {

  // 參數(shù)或者文件名

  String name = null;

  // 參數(shù)的value

  String value = null;

  // 讀取的流是否為文件的標志位

  boolean fileFlag = false;

  // 要存儲的文件。

  File tmpFile = null;

  // 上傳的文件的名字

  String fName = null;

  FileOutputStream baos = null;

  BufferedOutputStream bos = null;

  // 存儲參數(shù)的Hashtable

  paramHt = new Hashtable();

  updFileArr = new ArrayList();

  int rtnPos = 0;

  byte[] buffs = new byte[BUFSIZE * 8];

  // 取得ContentType

  String contentType = request.getContentType();

  int index = contentType.indexOf("boundary=");

  String boundary = "--" + contentType.substring(index + 9);

  String endBoundary = boundary + "--";

  // 從request對象中取得流。

  ServletInputStream sis = request.getInputStream();

  // 讀取1行

  while ((rtnPos = sis.readLine(buffs, 0, buffs.length)) != -1) {

  String strBuff = new String(buffs, 0, rtnPos);

  // 讀取1行數(shù)據(jù)

  if (strBuff.startsWith(boundary)) {

  if (name != null && name.trim().length() > 0) {

  if (fileFlag) {

  bos.flush();

  baos.close();

  bos.close();

  baos = null;

  bos = null;

  updFileArr.add(fName);

  } else {

  Object obj = paramHt.get(name);

  ArrayList al = new ArrayList();

  if (obj != null) {

  al = (ArrayList) obj;

  }

  al.add(value);

  System.out.println(value);

  paramHt.put(name, al);

  }

  }

  name = new String();

  value = new String();

  fileFlag = false;

  fName = new String();

  rtnPos = sis.readLine(buffs, 0, buffs.length);

  if (rtnPos != -1) {

  strBuff = new String(buffs, 0, rtnPos);

  if (strBuff.toLowerCase().startsWith(

  "content-disposition: form-data; ")) {

  int nIndex = strBuff.toLowerCase().indexOf(

  "name=\"");

  int nLastIndex = strBuff.toLowerCase().indexOf(

  "\"", nIndex + 6);

  name = strBuff.substring(nIndex + 6, nLastIndex);

  }

  int fIndex = strBuff.toLowerCase().indexOf(

  "filename=\"");

  if (fIndex != -1) {

  fileFlag = true;

  int fLastIndex = strBuff.toLowerCase().indexOf(

  "\"", fIndex + 10);

  fName = strBuff.substring(fIndex + 10, fLastIndex);

  fName = getFileName(fName);

  if (fName == null || fName.trim().length() == 0) {

  fileFlag = false;

  sis.readLine(buffs, 0, buffs.length);

  sis.readLine(buffs, 0, buffs.length);

  sis.readLine(buffs, 0, buffs.length);

  continue;

  }else{

  fName = getFileNameByTime(fName);

  sis.readLine(buffs, 0, buffs.length);

  sis.readLine(buffs, 0, buffs.length);

  }

  }

  }

  } else if (strBuff.startsWith(endBoundary)) {

  if (name != null && name.trim().length() > 0) {

  if (fileFlag) {

  bos.flush();

  baos.close();

  bos.close();

  baos = null;

  bos = null;

  updFileArr.add(fName);

  } else {

  Object obj = paramHt.get(name);

  ArrayList al = new ArrayList();

  if (obj != null) {

  al = (ArrayList) obj;

  }

  al.add(value);

  paramHt.put(name, al);

  }

  }

  } else {

  if (fileFlag) {

  if (baos == null && bos == null) {

  tmpFile = new File(uploadPath + fName);

  baos = new FileOutputStream(tmpFile);

  bos = new BufferedOutputStream(baos);

  }

  bos.write(buffs, 0, rtnPos);

  baos.flush();

  } else {

  System.out.println("test :" + value + "--" + strBuff);

  value = value + strBuff;

  }

  }

  }

  } catch (IOException e) {

  status = 4;

  }

  return status;

  }

  private int preCheck() {

  int errCode = 0;

  if ( request == null )

  return 1;

  if ( uploadPath == null || uploadPath.trim().length() == 0 )

  return 2;

  else{

  File tmpF = new File(uploadPath);

  if (!tmpF.exists())

  return 2;

  }

  String contentType = request.getContentType();

  if ( contentType.indexOf("multipart/form-data") == -1 )

  return 3;

  return errCode;

  }

  public String getParameter(String name){

  String value = "";

  if ( name == null || name.trim().length() == 0 )

  return value;

  value = (paramHt.get(name) == null)?"":(String)((ArrayList)paramHt.get(name)).get(0);

  return value;

  }

  public String[] getParameters(String name){

  if ( name == null || name.trim().length() == 0 )

  return null;

  if ( paramHt.get(name) == null )

  return null;

  ArrayList al = (ArrayList)paramHt.get(name);

  String[] strArr = new String[al.size()];

  for ( int i=0;i

  strArr[i] = (String)al.get(i);

  return strArr;

  }

  public int getUpdFileSize(){

  return updFileArr.size();

  }

  public String[] getUpdFileNames(){

  String[] strArr = new String[updFileArr.size()];

  for ( int i=0;i

  strArr[i] = (String)updFileArr.get(i);

  return strArr;

  }

  private String getFileName(String input){

  int fIndex = input.lastIndexOf("\\");

  if (fIndex == -1) {

  fIndex = input.lastIndexOf("/");

  if (fIndex == -1) {

  return input;

  }

  }

  input = input.substring(fIndex + 1);

  return input;

  }

  private String getFileNameByTime(String input){

  int index = input.indexOf(".");

  Date dt = new Date();

  SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");

  return input.substring(0,index) + sdf.format(dt) + input.substring(index);

  }

  }

  說明:

  這個類基本解決了上一貼的上一貼說的存在的bug和不足。主要做了如下修正。

  用戶可以設定文件上傳的路徑,這里沒有用request對象的getRealPath方法來取得相對路徑,而是用了絕對路徑。是一個小敗筆。因為有時候用戶只是得到服務器的一個應用,而不知道整個服務器的路徑。但是既然getRealPath自己可以得到,用戶自己取得也可以。

  在文件上傳處理的時候,預先進行了check,把一些可能出現(xiàn)的造成上傳失敗的情況拍查掉。避免該類出現(xiàn)不該出現(xiàn)的異常。

  捕獲了IO異常,避免文件上傳的時候出現(xiàn)異常時程序的不友好表現(xiàn)

  提供了方法返回form表單中其他參數(shù)的取得,模擬了HttpServletRequest對象的getParameter和getParameters方法(后面這個方法是叫這個名字么-_-b),取得Parameter的名稱的方法沒有提供,是個小缺陷。

  提供了方法返回上傳的文件的件數(shù)和上傳的文件名,方便用戶作其他操作。

  現(xiàn)在介紹下JSP頁面中如何用這個類實現(xiàn)上傳。

  首先,要把這個類編譯后的class文件拷貝到WEB-INF/classes/目錄下。注意保持package的結構。

  在jsp頁面中引用這個類

  使用的時候的注意事項:

  一定要設定request對象。

  一定要設定正確的上傳路徑。

  執(zhí)行完了之后才可以得到其他參數(shù),因為執(zhí)行了之后這些參數(shù)才被分析。

  1,2兩點如果沒有做到的話,process方法執(zhí)行的時候匯報錯。

  各個用戶可用的方法及說明:

  設定requet對象。

  public void setRequest(HttpServletRequest request)

  設定文件上傳的路徑。

  public void setUploadPath(String path)

  文件上傳處理主程序。

  @return int 操作結果 0 文件操作成功;1 request對象不存在。 2 沒有設定文件保存路徑或者文件保存路徑不正確;3

  沒有設定正確的enctype;4 文件操作異常。

  public int process()

  根據(jù)name取得form表單中其他傳遞的參數(shù)的值(多個的話返回其中一個)

  public String getParameter(String name)

  根據(jù)name取得form表單中其他傳遞的參數(shù)的值(返回數(shù)組,可有多個)

  public String[] getParameters(String name)

  取得上傳成功文件的個數(shù)

  public int getUpdFileSize()

  取得上傳的文件名對應的數(shù)組。

  public String[] getUpdFileNames()

  注意process方法地返回值,在不是0的情況下操作失敗。

  以下提供測試類以及測試頁面(見附件):

  HelloPostFile.html

  HelloPostFile.jsp

  寫在jsp中的代碼的測試文件。

  HelloPostFileWithClass.html

  HelloPostFileWithClass.jsp

  抽出class后的測試文件。

  src在

  WEB-INF/src/

  class在

  WEB-INF/classes/

  另:

  由于這個文件被我在中文日文系統(tǒng)下編輯過,注釋出現(xiàn)亂碼,所以大部分都刪掉了,見諒。

  下載:WEB-INF.zip

  JSP文件下載類整理完成?梢栽贘SP頁面中實現(xiàn)簡單的下載,支持文件打包下載功能。支持將字符串或者流生成文件提供下載的功能。但是也有一些缺點,F(xiàn)把這個類的基本介紹總結如下。

  名稱:jsp頁面下載類

  作者:SinNeR

  Mail:vogoals[at]hotmail.com

  特點及功能介紹:

  支持單文件下載。支持多文件zip壓縮下載。多文件zip壓縮可在服務器保留或者刪除副本。支持將特定的字符串或者byte數(shù)組以指定的文件名提供下載。

  在下載過程中需要提供response對象。并且選擇下載形式。

  下載處理前先進行check,避免出現(xiàn)錯誤。

  下載處理過程中出錯時,會報告錯誤信息。

  日文系統(tǒng)下文件名是中文時出現(xiàn)亂碼問題。

  處理前需要進行相對繁瑣的設定。

  現(xiàn)介紹下使用者可見的方法的功能。

  設定實現(xiàn)下載必須的response對象。

  public void setResponse(HttpServletResponse response)

  設定下載方式:0 為普通單文件下載。 1 為多文件壓縮成zip包下載。 2 為將指定的字符串等拼接成文件內(nèi)容提供給用戶下載。

  public void setDownType(int fileType)

  設定下載時顯示給用的文件名。

  public void setDisFileName(String fileName)

  壓縮文件下載時,設定壓縮文件暫時保存的路徑(路徑為絕對路徑)

  public void setZipFilePath( String path )

  壓縮文件下載時,設定服務器端生成的壓縮文件是否刪除。True 刪除;false 保留。

  public void setZipDelFlag(boolean b)

  壓縮文件下載時,設定要壓縮的文件的文件路徑(路徑為絕對路徑)

  public void setZipFileNames(String[] fileNames)

  單文件下載時,設定下載文件的路徑(絕對路徑)

  public void setDownFileName(String fileName)

  將字符串生成文件內(nèi)容模擬下載時,設定文件的內(nèi)容。參數(shù)為字符串(可多次調(diào)用)

  public int setFileContent(String fileContent)

  將字符串生成文件內(nèi)容模擬下載時,設定文件的內(nèi)容。參數(shù)為byte數(shù)組(可多次調(diào)用)

  返回值:0 操作正常; 9 出現(xiàn)IO異常。

  public int setFileContent(byte[] fileContent)

  將字符串生成文件內(nèi)容模擬下載時,調(diào)用此方法結束文件內(nèi)容設定。

  返回值:0 操作正常; 9 出現(xiàn)IO異常。

  public int setFileContentEnd()

  主處理函數(shù)。

  返回值: 0 處理正常;1 未設定response對象。 2 未設定文件下載方式。 3 未設定要顯示的文件名。 4 未設定要下載的文件路徑,或者設定的下載的文件路徑不存在。 9 IO異常。

  public int process()

  現(xiàn)在介紹不同下載模式下的簡單流程:

  單文件下載流程:

  //實例初始化

  JspFileDownload jfd = new JspFileDownload();

  //設定response對象

  jfd.setResponse(response);

  //設定文件下載模式 0 單文件下載。

  jfd.setDownType(0);

  //設定顯示的文件名 xxxx.xxx

  jfd.setDisFileName(filename);

  //設定要下載的文件的路徑,絕對路徑

  jfd.setDownFileName(filePath);

  //主處理函數(shù)。注意處理返回值。

  int result = jfd.process();

  多文件壓縮成ZIP文件下載:

  //實例初始化

  JspFileDownload jfd = new JspFileDownload();

  //設定response對象。

  jfd.setResponse(response);

  //設定下載模式 1 多文件壓縮成ZIP文件下載。

  jfd.setDownType(1);

  //設定顯示的文件名

  jfd.setDisFileName(filename);

  //設定要下載的文件的路徑(數(shù)組,絕對路徑)

  jfd.setZipFileNames(fileNames);

  //設定服務器端生成的zip文件是否保留。 true 刪除 false 保留,默認為false

  jfd.setZipDelFlag(true);

  //設定zip文件暫時保存的路徑 (是文件夾)

  jfd.setZipFilePath(zipfolder);

  //主處理函數(shù) 注意返回值

  Int result = jfd.process();

  將字符串生成為文件內(nèi)容,模擬文件下載:

  //實例初始化

  JspFileDownload jfd = new JspFileDownload();

  //設定response對象。

  jfd.setResponse(response);

  //設定下載模式 2 將字符串作為文件內(nèi)容,實現(xiàn)文件下載。

  jfd.setDownType(2);

  //設定文件顯示的名稱。

  jfd.setDisFileName(request.getParameter("filename"));

  //主處理函數(shù),下載前check,注意返回值

  out.print(jfd.process());

  //設定要寫入文件的內(nèi)容,參數(shù)可為字符串或者byte數(shù)組?啥啻握{(diào)用。

  jfd.setFileContent(request.getParameter("name"));

  //文件內(nèi)容設定完了,調(diào)用函數(shù)。

  jfd.setFileContentEnd();

  以上就是簡單的使用介紹。下面貼出主處理類的代碼。由于在日文系統(tǒng)下編輯的文件。注釋只能寫英文,英文太差-_-b。多包涵。

  package com.vogoal.util;

  import java.io.BufferedInputStream;

  import java.io.File;

  import java.io.FileInputStream;

  import java.io.FileOutputStream;

  import java.io.IOException;

  import java.io.InputStream;

  import java.util.zip.ZipEntry;

  import java.util.zip.ZipOutputStream;

  import javax.servlet.http.HttpServletResponse;

  /*

  * vogoalAPI 1.0

  * Auther SinNeR@blueidea.com

  * by vogoal.com

  * mail: vogoals@hotmail.com

  */

  /**

  * JSP FILE DOWNLOAD SUPPORT

  *

  * @author SinNeR

  * @version 1.0

  */

  public class JspFileDownload {

  /** request object */

  private HttpServletResponse response = null;

  /** file type: -1 un-setting; 0 normal file; 1 zip file ;2 stream*/

  private int fileType = -1;

  /** file name to be displayed */

  private String disFileName = null;

  /** zip file path */

  private String zipFilePath = null;

  /** file to be zipped */

  private String[] zipFileNames = null;

  private boolean zipDelFlag = false;

  /** file to be downloaded */

  private String downFileName = null;

  /** error code 0 */

  private static final int PROCESS_OK = 0;

  /** error code 1 */

  private static final int RESPONSE_IS_NULL = 1;

  /** error code 2 */

  private static final int UNSET_DOWNLOADTYPE = 2;

  /** error code 3 */

  private static final int UNSET_DIS_FILE_NAME = 3;

  /** error code 4 */

  private static final int UNSET_DOWN_FILE_NAME = 4;

  /** error code 9 */

  private static final int IO_EXCEPTION = 9;

  /**

  * set response object

  * @param response response Object

  */

  public void setResponse(HttpServletResponse response){

  this.response = response;

  }

  /**

  * set file type 0 normal file; 1 zip file ;2 stream

  * @param fileType

  */

  public void setDownType(int fileType){

  this.fileType = fileType;

  }

  /**

  * set display file name

  * @param fileName

  */

  public void setDisFileName(String fileName){

  this.disFileName = fileName;

  }

  /**

  * set zip file path

  * @param fileNames

  */

  public void setZipFilePath( String path ){

  this.zipFilePath = path;

  }

  public void setZipDelFlag(boolean b){

  this.zipDelFlag = b;

  }

  /**

  * set zip file names

  * @param fileNames

  */

  public void setZipFileNames(String[] fileNames){

  this.zipFileNames = fileNames;

  }

  /**

  * set download file name

  * @param fileName

  */

  public void setDownFileName(String fileName){

  this.downFileName = fileName;

  }

  /**

  * set file content

  * @param fileContent

  */

  public int setFileContent(String fileContent){

  try{

  byte[] buffs = fileContent.getBytes("UTF-8");

  response.getOutputStream().write(buffs);

  }catch(IOException e){

  return IO_EXCEPTION;

  }

  return PROCESS_OK;

  }

  /**

  * set file content

  * @param fileContent

  */

  public int setFileContent(byte[] fileContent){

  try{

  response.getOutputStream().write(fileContent);

  }catch(IOException e){

  return IO_EXCEPTION;

  }

  return PROCESS_OK;

  }

  /**

  * set file content end

  *

  */

  public int setFileContentEnd(){

  try{

  response.getOutputStream().close();

  }catch(IOException e){

  return IO_EXCEPTION;

  }

  return PROCESS_OK;

  }

  /**

  * main process

  * @return

  */

  public int process(){

  int status = PROCESS_OK;

  status = preCheck();

  if ( status != PROCESS_OK )

  return status;

  String fileName = disFileName;

  response.setContentType("APPLICATION/OCTET-STREAM");

  response.setHeader("Content-Disposition","attachment;filename=\"" + fileName + "\"");

  int BUFSIZE = 1024 * 8;

  int rtnPos = 0;

  byte[] buffs = new byte[ BUFSIZE ];

  FileInputStream inStream = null;

  ZipOutputStream zos = null;

  InputStream is = null;

  String filepath = null;

  try{

  if ( fileType == 0 || fileType == 1){

  if ( fileType == 0 ){

  filepath = downFileName;

  }else{

  filepath = zipFilePath + fileName;

  String[] fileToZip = zipFileNames;

  zos=new ZipOutputStream(new FileOutputStream(filepath));

  ZipEntry ze=null;

  byte[] buf=new byte[BUFSIZE];

  int readLen=0;

  for (int i= 0;i

  File f= new File(fileToZip[i]);

  ze=new ZipEntry(f.getName());

  ze.setSize(f.length());

  ze.setTime(f.lastModified());

  zos.putNextEntry(ze);

  is=new BufferedInputStream(new FileInputStream(f));

  while ((readLen=is.read(buf, 0, BUFSIZE))!=-1) {

  zos.write(buf, 0, readLen);

  }

  is.close();

  }

  zos.close();

  }

  inStream =new FileInputStream(filepath);

  while((rtnPos=inStream.read(buffs)) >0)

  response.getOutputStream().write(buffs,0,rtnPos);

  response.getOutputStream().close();

  inStream.close();

  }

  if ( zipDelFlag ){

  File fToDel = new File(filepath);

  fToDel.delete();

  }

  }catch(IOException e){

  return IO_EXCEPTION;

  }finally{

  try{

  if ( inStream != null ){

  inStream.close();

  inStream = null;

  }

  if ( zos != null ){

  zos.close();

  zos = null;

  }

  if ( is != null ){

  is.close();

  is = null;

  }

  }catch (IOException e){

  }

  }

  return status;

  }

  /**

  * pre check.

  * @return

  */

  private int preCheck(){

  if ( response == null )

  return RESPONSE_IS_NULL;

  if ( disFileName == null || disFileName.trim().length() == 0 )

  return UNSET_DIS_FILE_NAME;

  if ( fileType == -1 )

  return UNSET_DOWNLOADTYPE;

  else if ( fileType == 0 ){

  if ( downFileName == null || downFileName.trim().length() == 0 )

  return UNSET_DOWN_FILE_NAME;

  else{

  if ( !isFile( downFileName ) )

  return UNSET_DOWN_FILE_NAME;

  }

  }else if ( fileType == 1 ){

  if ( zipFilePath == null || zipFilePath.length() == 0 )

  return UNSET_DOWN_FILE_NAME;

  else{

  if ( !isDirect(zipFilePath) )

  return UNSET_DOWN_FILE_NAME;

  }

  if ( zipFileNames == null || zipFileNames.length == 0 )

  return UNSET_DOWN_FILE_NAME;

  else{

  for ( int i=0;i

  if ( zipFileNames[i] == null || zipFileNames[i].trim().length() == 0 )

  return UNSET_DOWN_FILE_NAME;

  else{

  if ( !isFile( zipFileNames[i] ) )

  return UNSET_DOWN_FILE_NAME;

  }

  }

  }

  }else if ( fileType == 2 ){

  //doing nothing

  }else{

  return UNSET_DOWNLOADTYPE;

  }

  return PROCESS_OK;

  }

  private boolean isFile(String fileName){

  File f = new File(fileName);

  if (!f.exists() || !f.isFile())

  return false;

  return true;

  }

  private boolean isDirect(String filePath){

  File f = new File(filePath);

  if (!f.exists() || !f.isDirectory())

  return false;

  return true;

  }

  }

  至此,jsp頁面文件下載介紹完成。

  使用的時候,把這個類生成的class文件拷貝到WEB-INF/classes下。(注意保持包的路徑)

  然后在使用的頁面import進這個class即可。

  注意:

  可能存在編碼方式的問題,如果出現(xiàn)或者有別的bug請聯(lián)系我,我來debug。

  附件為這個類的source以及測試程序。

  附件說明:

  單文件下載測試程序

  請求頁面:downloadSimpleFile.html

  下載功能實現(xiàn)頁面:downloadSimpleFile.jsp

  多文件壓縮成zip文件下載的測試程序

  請求頁面:downloadZipFile.html

  下載功能實現(xiàn)頁面:downloadZipFile.jsp

  字符串生成文件內(nèi)容模擬文件下載的測試程序。

  請求頁面:downloadStreamFile.html

  下載功能實現(xiàn)頁面:downloadStreamFile.jsp

  Source及class文件。

  Source WEB-INF/src/com/vogoal/util/ JspFileDownload.java

  Class文件WEB-INF/classes/com/vogoal/util/ JspFileDownload.class

【JSP頁面如何實現(xiàn)文件上傳下載】相關文章:

PHP中實現(xiàn)頁面跳轉(zhuǎn)07-06

PHP頁面跳轉(zhuǎn)實現(xiàn)技巧09-19

php頁面緩存實現(xiàn)方法07-20

PHP頁面跳轉(zhuǎn)幾種實現(xiàn)技巧07-26

Dreamweaver如何創(chuàng)建頁面08-08

如何共享文件08-28

PHP實現(xiàn)大文件上傳源代碼10-21

如何編輯pdf文件10-02

如何備份電腦文件09-30

PHP中讀取大文件實現(xiàn)方法詳解09-23