棒球比分直播比分:Java快速開發平臺

棒球比分大小怎么算 www.355548.live www.fastunit.com

  BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
  23 Posts :: 0 Stories :: 273 Comments :: 0 Trackbacks

一、如何使用

如果此Servlet命名為download,請求的URL為:/download?path=xxx,請求后出現下載窗口:

download.gif

二、源碼

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FileDownload extends HttpServlet {

  
protected void service(HttpServletRequest req, HttpServletResponse res)
      
throws ServletException, IOException {

    
// 服務器相對路徑
    String path = req.getParameter("path");
    
// 服務器絕對路徑
    path = getServletContext().getRealPath("/"+ path;

    
// 檢查文件是否存在
    File obj = new File(path);
    
if (!obj.exists()) {
      res.setContentType(
"text/html;charset=GBK");
      res.getWriter().print(
"指定文件不存在!");
      
return;
    }

    
// 讀取文件名:用于設置客戶端保存時指定默認文件名
    int index = path.lastIndexOf("\\"); // 前提:傳入的path字符串以“\”表示目錄分隔符
    String fileName = path.substring(index + 1);

    
// 寫流文件到前端瀏覽器
    ServletOutputStream out = res.getOutputStream();
    res.setHeader(
"Content-disposition""attachment;filename=" + fileName);
    BufferedInputStream bis 
= null;
    BufferedOutputStream bos 
= null;
    
try {
      bis 
= new BufferedInputStream(new FileInputStream(path));
      bos 
= new BufferedOutputStream(out);
      
byte[] buff = new byte[2048];
      
int bytesRead;
      
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
        bos.write(buff, 
0, bytesRead);
      }
    } 
catch (IOException e) {
      
throw e;
    } 
finally {
      
if (bis != null)
        bis.close();
      
if (bos != null)
        bos.close();
    }
  }

}

三、web.xml配置

<servlet>
    
<servlet-name>FileDownload</servlet-name>
    
<servlet-class>com.fastunit.test.FileDownload</servlet-class>
</servlet>
<servlet-mapping>
    
<servlet-name>FileDownload</servlet-name>
    
<url-pattern>/download</url-pattern>
</servlet-mapping>

四、補充說明

本例只是一個簡單實現,應用時需要在實際環境中處理以下問題:
1. 權限問題:結合實際系統增加用戶權限控制
2. 中文文件名:中文問題與運行環境有關,不同環境下解決方式也有差異,一般可通過轉碼來解決。
3. 文件類型:文件類型統一時可直接指定,如res.setContentType("application/zip");文件類型不確定時可不設、設一個不存在的、或通過解析文件名后綴來設置,以實際測試通過為準。

posted on 2008-01-22 14:26 FastUnit 閱讀(11733) 評論(4)  編輯  收藏 所屬分類: Java

Feedback

# re: Servlet實現文件下載的源碼 2008-01-23 18:15 stoneshao
需要修正的幾個地方:
1。中文文件名亂碼
2。mime的信息  回復  更多評論
  

# re: Servlet實現文件下載的源碼 2008-01-24 19:39 FastUnit
@stoneshao
原文不夠嚴謹,這兩點確實是關鍵之處,已根據你的提議在文中增加了補充說明。  回復  更多評論
  

# re: Servlet實現文件下載的源碼 2010-06-13 14:15 一個好人
如果文件的大小超過50M,這個好像行不通吧  回復  更多評論
  

# re: Servlet實現文件下載的源碼[未登錄] 2014-03-18 13:32 java愛好者
把流文件不寫到前端瀏覽器而是用戶自己指定的文件如何改啊
急求救
  回復  更多評論
  

{ganrao} 基金资产配置 辽宁快乐12中奖金额 3b双彩论坛讨论专区 体彩排列五开奖试机号 广西11选5官网开奖 赛车pk10开奖视频 黑龙江36选7中奖查询 湖北十一选五开奖昨天的号码 绝对权重 正规股票配资平台排名 江西快三和值走势图 河南快三计划手机版 股票如何看趋势 湖北11选五一定牛走势图 股票配资平台代理怎么拿 2020年香港今日开奖结果