Servlet上傳檔案注意事項

Servlet(Server Applet),全稱Java Servlet,未有中文譯文。是用Java編寫的伺服器端程式。下面小編為大家整理了關於Servlet上傳檔案注意事項,希望能為你提供幫助:

Servlet上傳檔案注意事項

  準備階段,下載需要的包:

在Servlet中進行檔案上傳需要用到外部的類庫,apache提供了這些類庫, 主要需要和

下載的步驟如下:

進入網站, ——>在Projects下找到commons,點選進入——>找到Components下的FileUpload,點選進入就可以找到下載

頁面如下:

可以看到這裡有開發指南和下載地址,如果要詳細學習,慢慢看這裡的資源就可以了。

包的下載地址:

把兩個jar包放到WEB-INF的lib目錄下。

  開發階段:

上傳頁面:

<%@ page language="java" import=".*" pageEncoding="UTF-8"%>

<%

String path = ontextPath();

String basePath = cheme()+"://"+erverName()+":"+erverPort()+path+"/";

%>

這裡注意第24行,上傳檔案時要指定提交方法method="post", 資訊型別為enctype="multipart/form-data"

上傳功能servlet:FileUpload

package let;

import ;

import ception;

import ator;

import ;

import letException;

import Servlet;

import ServletRequest;

import ServletResponse;

import Item;

import ItemFactory;

import UploadException;

import FileItemFactory;

import letFileUpload;

public class FileUpload extends HttpServlet {

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

haracterEncoding("UTF-8");

fileControl(req, resp);

}

/**

* 上傳檔案的處理

*/

private void fileControl(HttpServletRequest req, HttpServletResponse resp) throws ServletException {

// 在解析請求之前先判斷請求型別是否為檔案上傳型別

boolean isMultipart = ltipartContent(req);

// 檔案上傳處理工廠

FileItemFactory factory = new DiskFileItemFactory();

// 建立檔案上傳處理器

ServletFileUpload upload = new ServletFileUpload(factory);

// 開始解析請求資訊

List items = null;

try {

items = eRequest(req);

}

catch (FileUploadException e) {

tStackTrace();

}

// 對所有請求資訊進行判斷

Iterator iter = ator();

while (ext()) {

FileItem item = (FileItem) ();

// 資訊為普通的格式

if (rmField()) {

String fieldName = ieldName();

String value = tring();

ttribute(fieldName, value);

}

// 資訊為檔案格式

else {

String fileName = ame();

int index = IndexOf("");

fileName = tring(index + 1);

ttribute("realFileName", fileName);

// 將檔案寫入

// String path = ontextPath();

// String directory = "uploadFile";

// String basePath = cheme() + "://" + erverName() + ":" + erverPort() + path + "/" + directory;

String basePath = ealPath("/uploadFile");

File file = new File(basePath, fileName);

try {

e(file);

}

catch (Exception e) {

tStackTrace();

}

}

}

try {

equestDispatcher("/")ard(req, resp);

}

catch (IOException e) {

tStackTrace();

}

}

}

這裡要注意第66~68行,將檔案上傳到Web專案的."uploadFile"資料夾中,如果用這種方法得到的路徑是"http://localhost:8080/upload/uploadFile", 而建立File類用的路徑是絕對路徑,這樣就會出問題,所以這裡要用的是得到真實路徑的方法ealPath().

以上是最簡單的檔案上傳,如果要加入上傳的限制可以在DiskFileItemFactory和ServletFileUpload中進行限制:

在34行後加入:

//建立臨時檔案目錄

File tempFile = new File(ealPath("/temp"));

//設定快取大小

((DiskFileItemFactory) factory)izeThreshold(1024*1024);

//設定臨時檔案存放地點

((DiskFileItemFactory) factory)epository(tempFile);

注意第72行的e()方法,如果使用了這個方法寫入檔案,那麼臨時檔案會被系統自動刪除.

在38行後加入:

//將頁面請求傳遞資訊最大值設定為50M

izeMax(1024*1024*50);

//將單個上傳檔案資訊最大值設定為6M

ileSizeMax(1024*1024*6);