一、檔案上傳
檔案的上傳也是基于表單來完成的,表單中的file元素可以自動生成一個文本框和一個按鈕,文本框可以輸入本地檔案名或路徑,點選按鈕則可以打開一個檔案選擇框讓使用者選中本地檔案。需要注意的是在檔案上傳時還必須設定表單的enctype屬性,并将它的值設定為multipart/form-data。
upload.jsp
<form method="post" enctype="multipart/form-data"
action="smartupladservlet.do">
<input type="text" name="username"><br>
<input type="file" name="myfile"><br>
<input type="file" name="myfile2"><br>
<input type="file" name="myfile3"><br>
<input type="submit" value="上傳">
</form>
</body>
這裡使用的是smartupload,需要該包。
上傳檔案的servlet
import java.io.file;
import java.io.ioexception;
import java.io.printwriter;
import java.sql.sqlexception;
import javax.servlet.servletexception;
import javax.servlet.http.httpservlet;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import com.jspsmart.upload.smartupload;
import com.jspsmart.upload.smartuploadexception;
public class smartupladservlet extends httpservlet {
public smartupladservlet() {
super();
}
public void destroy() {
super.destroy();
public void doget(httpservletrequest request, httpservletresponse response)
throws servletexception, ioexception {
//檔案上傳個數
int count = 0;
//檔案上傳位址
string filepath = getservletcontext().getrealpath("/")+"smartupload";
//如果檔案夾不存在 則建立這個檔案夾
file file = new file(filepath);
if(!file.exists())
{
file.mkdir();
}
//初始化對象
smartupload su = new smartupload();
su.initialize(getservletconfig(),request,response);
//設定檔案最大容量
su.setmaxfilesize(10*1024*1024);
//設定所有檔案最大容量
su.settotalmaxfilesize(100*1024*1024);
//設定上傳檔案類型
su.setallowedfileslist("rar,txt,jpg,bmp,gif");
try {
//設定禁止上傳的檔案類型
su.setdeniedfileslist("jsp,js,html,css");
//上傳檔案
su.upload();
system.out.println("username=" + su.getrequest().getparameter("username"));
count = su.save(filepath);
}
catch (sqlexception e) {
e.printstacktrace();
catch (smartuploadexception e) {
for (int i = 0; i < su.getfiles().getcount(); i++) {
com.jspsmart.upload.file tempfile = su.getfiles().getfile(i);
system.out.println("表單項名稱:" + tempfile.getfieldname());
system.out.println("檔案名:" + tempfile.getfilename());
system.out.println("檔案長度:" + tempfile.getsize());
system.out.println("檔案擴充名:" + tempfile.getfileext());
system.out.println("檔案全名:" + tempfile.getfilepathname());
system.out.println("上傳成功!共" + count + "個檔案!");
public void dopost(httpservletrequest request, httpservletresponse response)
doget(request,response);
public void init() throws servletexception {
}
web.xml檔案配置
<servlet>
<description>this is the description of my j2ee component</description>
<display-name>this is the display name of my j2ee component</display-name>
<servlet-name>smartupladservlet</servlet-name>
<servlet-class>com.kay.servlet.smartupladservlet</servlet-class>
</servlet>
<servlet-mapping>
<url-pattern>/smartupladservlet.do</url-pattern>
</servlet-mapping>
二、檔案下載下傳
通過超連結下載下傳檔案,會暴露了下載下傳檔案在伺服器中的真實位址,不利于對資源進行安全保護,而且利用超連結下載下傳檔案,伺服器端得檔案隻能存放在web應用程式所在的目錄下。利用程式編碼實作下載下傳,可以增加安全機制,比如我們隻能讓vip會員下載下傳等等。還可以從任意位置進行下載下傳,我們可以将檔案放到web應用程式外的目錄中。
顯示檔案夾内所有檔案的servlet
import java.util.arraylist;
import java.util.list;
public class showfileservlet extends httpservlet {
string path = "c:/file";
//聲明集合存放目錄下所有檔案的檔案名
list<string> filelist = new arraylist<string>();
file folder = new file(path);
//判斷檔案夾是否存在并且是否是一個目錄
if(folder.exists() && folder.isdirectory()){
//獲得目錄中所有檔案及目錄
file[] files = folder.listfiles();
for (file file : files) {
//如果是檔案
if(file.isfile()){
//将檔案名放入集合中
filelist.add(file.getname());
}
}
request.setattribute("filelist", filelist);
request.getrequestdispatcher("showfile.jsp").forward(request, response);
showfile.jsp
<%@ page language="java" pageencoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>
<title>顯示所有檔案</title>
</head>
<body>
請選擇您要下載下傳的檔案:<br/>
<c:foreach items="${filelist}" var="filename">
<a href="downloadservlet?filename=${filename }">${filename }</a><br/>
</c:foreach>
</body>
</html>
下載下傳檔案的downloadservlet
import java.io.bufferedinputstream;
import java.io.bufferedoutputstream;
import java.io.fileinputstream;
import java.io.inputstream;
import javax.servlet.servletoutputstream;
public class downloadservlet extends httpservlet {
string filename = request.getparameter("filename");
file file = new file(path + "/" + filename);
//如果檔案存在
if (file.exists()) {
//設定響應類型及響應頭
response.setcontenttype("application/x-msdownload");
response.addheader("content-disposition", "attachment; filename=\""
+ filename + "\"");
//讀取檔案
inputstream inputstream = new fileinputstream(file);
bufferedinputstream bis = new bufferedinputstream(inputstream);
byte[] bytes = new byte[1024];
servletoutputstream outstream = response.getoutputstream();
bufferedoutputstream bos = new bufferedoutputstream(outstream);
int readlength = 0;
while ((readlength = bis.read(bytes)) != -1) {
bos.write(bytes, 0, readlength);
//釋放資源
inputstream.close();
bis.close();
bos.flush();
outstream.close();
bos.close();
doget(request, response);
原帖位址:http://blog.sina.com.cn/s/blog_60f823dd01017nz9.html