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);