分享fileupload獲取文件路徑「fileupload控制項上傳文章」

一、什麼是fileUpload?

fileUpload是apache的commons組件提供的上傳組件,它最主要的工作就是幫我們解析request.getInpustream()。可以參考在線API文檔:
http://tool.oschina.net/apidocs/apidoc?api=commons-fileupload

二、fileupload組件工作原理

JAVA學習筆記——fileUpload文件上傳

三、fileupload核心API

1. DiskFileItemFactory

構造器

1) DiskFileItemFactory() // 使用默認配置

2) DiskFileItemFactory(int sizeThreshold, File repository)

 sizeThreshold 內存緩衝區, 不能設置太大, 否則會導致JVM崩潰

 repository 臨時文件目錄

2. ServletFileUpload

1) isMutipartContent(request) // 判斷上傳表單是否為multipart/form-data類型 true/false

2) parseRequest(request) // 解析request, 返回值為List<FileItem>類型

3) isFormField() //是否是普通文件

4) setFileSizeMax(long) // 上傳文件單個最大值 fileupload內部通過拋出異常的形式處理, 處理文件大小超出限制, 可以通過捕獲這個異常, 提示給用戶

5) setSizeMax(long) // 上傳文件總量最大值

6) setHeaderEncoding(String) // 設置編碼格式

四、實現過程

1.導入jar包

JAVA學習筆記——fileUpload文件上傳

2.編寫jsp

JAVA學習筆記——fileUpload文件上傳

3.編寫servlet

//創建業務層對象

NewsService newsService = new NewsService();

InputStream in = null;

OutputStream out = null;

int id = 0;//頁面傳來的id值

//創建解析器工廠

DiskFileItemFactory factory = new DiskFileItemFactory();

//獲取解析器

ServletFileUpload upload = new ServletFileUpload(factory);

// 上傳表單是否為multipart/form-data類型

if(!upload.isMultipartContent(request)) {

return ;

}

//解析request的輸入流

try {

List<FileItem> parseRequest = upload.parseRequest(request);

//迭代list

for(FileItem f:parseRequest) {

if(f.isFormField()) {

//普通欄位

id = Integer.parseInt(f.getFieldName());

String value = f.getString();

System.out.println(“name”+”=”+value);

}else {

//上傳文件

//獲取上傳文件名

String name = f.getName();

System.out.println(“文件名”+name);

name = name.substring(name.lastIndexOf(“\”)+1);

System.out.println(name);

//獲取輸入流

in = f.getInputStream();

//獲取上傳文件路徑

String savePath = “D:\workspacedt91\FileUpLoadTestDemo\WebContent\images\”+name;

//上傳文件名若不存在, 則先創建

File path = new File(savePath);

if(!path.exists()) {

path.getParentFile().mkdir();

}

//獲取輸出流

out = new FileOutputStream(path);

int len = 0;

byte[] b = new byte[1024];

while((len = in.read(b)) > 0) {

out.write(b,0,len);

}

System.out.println(“上傳成功”);

//保存到資料庫

int count = newsService.saveUrl(name, id);

if(count > 0 ) {

System.out.println(“路徑保存成功”);

}else {

System.out.println(“路徑保存失敗”);

}

}

}

} catch (FileUploadException e) {

// TODO Auto-generated catch block

System.out.println(“上傳失敗”);

e.printStackTrace();

}finally {

if(in != null) {

in.close();

}

if(out != null) {

out.close();

}

}

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/209241.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-08 15:26
下一篇 2024-12-08 15:26

相關推薦

發表回復

登錄後才能評論