SmartUpload實現文件的上傳與下載

###1.文件上傳頁面端的配置java

  1. 頁面端的encode:gbk(要將頁面端的字符編碼設置爲``` gbk
1. 表單提交方式:```
post
  1. 設置``` enctype:」multipart/form-data」
###2.常見的servlet上傳組件
1. apache comments FileUpload
1. SmartUpload(下面我主要以這種爲例,實現文件上傳)

### 3.SmartUpload實現文件上傳的步驟(見代碼便可)
 1. 具體操做步驟代碼

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {apache

//獲取服務器指定目錄的絕對路徑
	String dir = this.getServletContext().getRealPath("files");
	List list = new ArrayList();
	//建立文件上傳組件對象
	SmartUpload su = new SmartUpload();
	//初始化請求,響應及配置
	try {
		su.initialize(this, request, response);
		
		//設置容許上傳的文件列表
		su.setAllowedFilesList("txt,png,jpg,gif,doc,xls");
		//設置容許單個文件的最大大小
		su.setMaxFileSize(1024*1024*20);
		//設置容許總共文件的上傳大小
		su.setTotalMaxFileSize(1024*1024*100);
		//上傳
		su.upload();
		/**********獲取上傳過來文件**********/
		Files files = su.getFiles();
		//獲取上傳的文件數
		int count = files.getCount();
		//System.out.println("上傳的文件數:"+count);
		for(int i = 0;i < count;i++){
			//注意與io包中的file區別
			com.jspsmart.upload.File file = files.getFile(i);
			//獲取文件名稱
			String fileName = file.getFileName();
			if(!"".equals(fileName)){
				//將當前文件存儲到服務器的指定位置中
				//java.io.File.separator與項目有關的分隔符
				file.saveAs(dir+java.io.File.separator+fileName);
				list.add(fileName);
			}
		}
		request.setAttribute("list", list);
		request.getRequestDispatcher("main.jsp").forward(request, response);
		
	} catch (SmartUploadException e) {
		e.printStackTrace();
	}
}
### 4.文件的下載
1. 接着上面上傳的例子,若是個人文件上傳完成後,在指定目錄
下面會有咱們指定的文件,如今,上傳完成後,咱們跳轉到指定頁面,跳轉的同時,咱們傳遞參數文件名的集合(由於咱們要根據文件名進行下載)。

list.add(fileName); } } request.setAttribute("list", list); request.getRequestDispatcher("main.jsp").forward(request, response);服務器

1. 咱們在頁面上獲取到文件名以後進行下載指定文件
<c:forEach items="${list}" var="fileName">
	<P><a href="DownloadServlet?fname=${fileName}">${fileName}</a></P>
</c:forEach>
1. 下載部分,這裏講兩種方法
    1. 利用smartUpload

SmartUpload su = new SmartUpload(); su.initialize(this,request,response); try { su.downloadFile(path); } catch (SmartUploadException e) { e.printStackTrace(); }jsp

1. 由於咱們已經得到文件的位置,咱們根據以前咱們讀取文件的方式進行下載文件

String name = request.getParameter("fname"); String path = this.getServletContext().getRealPath("files"); path = path + java.io.File.separator + name;post

/*BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
	
	//設置響應方式,以附件響應
	response.setHeader("Content-Disposition", "attachment;filename="+new String(name.getBytes("gbk"),"iso-8859-1"));
	
	BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
	byte[] b = new byte[1024];
	int len = 0;
	while((len = bis.read(b)) != -1){
		bos.write(b,0,len);
	}
	bos.close();
	bis.close();*/
**關於第一種方式,目前我沒有碰見中文亂碼的問題,若是出現則估計很差解決。則能夠採用第二種方式
    **

    **第二種方式就是咱們要設置響應方式,以附件形式響應,同時filename的部分,若是name是中文,咱們         須要現將name以gbk的形式進行讀取,而後又轉碼成"iso-8859-1",否則是下載不了圖片的。
**
相關文章
相關標籤/搜索