站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题采用Http Servlet 实现web文件下载

采用Http Servlet 实现web文件下载

摘要: 文件操作是网站编程的重要内容之一,asp关于文件操作讨论的已经很多了,让我们来看看jsp中是如何实现的。这里用到了两个文件,一个jsp文件一个javabean文件,通过jsp中调用javabean可以轻松写文本文件。

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.TopWisdom.framework.util.*;

public class WebDownLoad extends HttpServlet {
public WebDownLoad() {
}

private ServletConfig config;

public void init(ServletConfig config) throws ServletException {
super.init(config);
this.config = config;
}

public void doPost(HttpServletRequest req,HttpServletResponse res) throws ServletException {
doGet(req,res);
}
file://取得附件的名称
public static String getAttachName(String file_name) {
if(file_name==null) return "";
file_name = file_name.trim();
int iPos = 0;
iPos = file_name.lastIndexOf("\\");
if(iPos>-1){
file_name = file_name.substring(iPos+1);
}
iPos = file_name.lastIndexOf("/");
if(iPos>-1){
file_name = file_name.substring(iPos+1);
}
iPos = file_name.lastIndexOf(File.separator);
if(iPos>-1){
file_name = file_name.substring(iPos+1);
}
return file_name;
}
file://UTF8转码
public static String toUtf8String(String s) {
StringBuffer sb = new StringBuffer();
for (int i=0;i char c = s.charAt(i);
if (c >= 0 && c <= 255) {
sb.append(c);
} else {
byte[] b;
try {
b = Character.toString(c).getBytes("utf-8");
} catch (Exception ex) {
System.out.println(ex);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0) k += 256;
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
String s_utf8 = sb.toString();
sb.delete(0,sb.length());
sb.setLength(0);
sb = null;
return s_utf8;
}
file://取得下载文件的真实全路径名称
private String getRealName(HttpServletRequest request,String file_name) {
if(request==null || file_name==null) return null;
file_name = file_name.trim();
if(file_name.equals("")) return null;

String file_path = request.getRealPath(file_name);
if ( file_path== null) return null;
File file = new File(file_path);
if (!file.exists()) return null;
return file_path;
}
file://实现下载
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException {
String file_name = request.getParameter("file_name");
if(file_name==null) file_name = "";
file_name = file_name.trim();

InputStream inStream= null;
String attch_name = "";

byte[] b = new byte[100];
int len= 0;
try {
file://取得附件的名称
attch_name = getAttachName(file_name);

file_name = getRealName(request,file_name);
if(file_name==null) {
System.out.println("文件不存在,或者禁止下载");
return ;
}
attch_name = toUtf8String(attch_name);
file://读到流中
inStream=new FileInputStream(file_name);
file://设置输出的格式
response.reset();
response.setContentType("application/x-msdownload");


response.addHeader("Content-Disposition","attachment; filename=\"" + attch_name + "\"");
file://循环取出流中的数据
while((len=inStream.read(b)) >0) {
response.getOutputStream().write(b,0,len);
}
inStream.close();
}catch ( Exception e ){
if ( e instanceof java.io.FileNotFoundException ) {
try {
response.sendRedirect("/tip/file_not_found.html");
}
catch ( IOException ex ) {
ex.printStackTrace(System.err);
}
}
else {
e.printStackTrace(System.err);
}
}
}
}


↑返回目录
前一篇: 根据MIDlet套件自动生成jad文件
后一篇: jsp文件操作之写入篇