日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java 文件上传 jar_JavaWeb 之 使用 commons-fileupload.jar 实现文件上传

發(fā)布時(shí)間:2025/3/20 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 文件上传 jar_JavaWeb 之 使用 commons-fileupload.jar 实现文件上传 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、文件上傳

文件的上傳和下載,是非常常見的功能,在很多的系統(tǒng)中,或軟件中都經(jīng)常使用文件的上傳和下載

文件的上傳主要分為下面幾步:

1、前臺(tái)頁面需要一個(gè) form 標(biāo)簽,里面的 method 為 post 請(qǐng)求;

2、在 form 標(biāo)簽必須添加 encType屬性,且屬性值必須是 multipart/form-data值;

3、在 form 標(biāo)簽中使用 input type=file 添加上傳的文件;

4、在服務(wù)器編寫代碼(Servlet程序)接收,處理上傳的數(shù)據(jù)。

注意點(diǎn):

1. 請(qǐng)求必須是 post,因?yàn)?get 請(qǐng)求有長(zhǎng)度限制;

2. encType=multipart/form-data 表示提交的數(shù)據(jù),是以多段(每一個(gè)表單項(xiàng)一個(gè)數(shù)據(jù)段)的形式進(jìn)行拼接,然后以二進(jìn)制流的形式發(fā)送給服務(wù)器的;

3. 在服務(wù)器端必須以流的方式接收數(shù)據(jù);

二、文件上傳之 HTTP 協(xié)議的說明

三、Commons-fileupload.jar 常用 API

注意:commons-fileupload.jar 包需要依賴 commons-io.jar這個(gè)包,所以需要在項(xiàng)目中引入兩個(gè)包。

1、常用API

FileItemFactory 表單項(xiàng)工廠接口

ServletFileUpload 文件上傳類,用于解析上傳的數(shù)據(jù)

FileItem 表單項(xiàng)類,表示每一個(gè)表單項(xiàng)

boolean ServletFileUpload.isMultipartContent(HttpServletRequest request) 判斷當(dāng)前上傳的數(shù)據(jù)格式是否是多段的格式,只有是多段數(shù)據(jù),才能使用該方式

public List parseRequest(HttpServletRequest request) 解析上傳的數(shù)據(jù),返回包含 表單項(xiàng)的 List 集合

boolean FileItem.isFormField()       判斷當(dāng)前這個(gè)表單項(xiàng),是否是普通的表單項(xiàng),還是上傳的文件類型,true 表示普通類型的表單項(xiàng);false 表示上傳的文件類型

String FileItem.getFieldName()       獲取表單項(xiàng)的 name 屬性值

String FileItem.getString()     獲取當(dāng)前表單項(xiàng)的值;

String FileItem.getName()         獲取上傳的文件名

void FileItem.write( file )        將上傳的文件寫到 參數(shù) file 所指向存取的硬盤位置

2、流程圖

四、案例

上傳文件的表單:

1

2   用戶名:

3   照片:

4   

5

解析上傳的數(shù)據(jù)的 Servlet

1 importorg.apache.commons.fileupload.FileItem;2 importorg.apache.commons.fileupload.FileItemFactory;3 importorg.apache.commons.fileupload.disk.DiskFileItemFactory;4 importorg.apache.commons.fileupload.servlet.ServletFileUpload;5

6 importjavax.servlet.ServletException;7 importjavax.servlet.http.HttpServlet;8 importjavax.servlet.http.HttpServletRequest;9 importjavax.servlet.http.HttpServletResponse;10 importjava.io.File;11 importjava.io.IOException;12 importjava.util.List;13

14 public class UploadServlet extendsHttpServlet {15 protected void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {16 //解決中文亂碼

17 request.setCharacterEncoding("UTF-8");18

19 //1. 先判斷上傳的的數(shù)據(jù)是否多段數(shù)據(jù)(只有是多段的數(shù)據(jù),才是文件上傳的)

20 if( ServletFileUpload.isMultipartContent(request) ) {21

22 //創(chuàng)建 FileItemFactory 工廠實(shí)現(xiàn)類

23 FileItemFactory fileItemFactory = newDiskFileItemFactory();24 //2. 創(chuàng)建用于解析上傳數(shù)據(jù)的工具類

25 ServletFileUpload servletFileUpload = newServletFileUpload(fileItemFactory);26

27 try{28 //3. 解析 上傳的數(shù)據(jù),得到每一個(gè)表單項(xiàng) FiltItem

29 List list =servletFileUpload.parseRequest(request);30

31 //循環(huán)判斷,每一個(gè)表單項(xiàng),是普通類型,還是上傳的文件

32 for(FileItem fileItem : list) {33

34 //是普通表單項(xiàng)

35 if( fileItem.isFormField() ) {36 String fieldName =fileItem.getFieldName();37 String value = fileItem.getString("UTF-8");38

39 System.out.println("表單項(xiàng)的name屬性值 = " +fieldName);40 System.out.println("表單項(xiàng)的value屬性值 = " +value);41 } else{42 //是上傳的文件

43 String name =fileItem.getFieldName();44 String fieldName =fileItem.getName();45

46 System.out.println("表單項(xiàng)的name屬性值 = " +name);47 System.out.println("上傳的文件名 = " +fieldName);48

49 //將數(shù)據(jù)寫到指定的位置

50 fileItem.write(new File( "F:\\" +fileItem.getName()));51 }52 }53

54 } catch(Exception e) {55 e.printStackTrace();56 }57

58 }59

60

61 }

注意:

這樣的上傳還有一個(gè)小問題,當(dāng)上傳多個(gè)同名同類型的文件時(shí),后上傳的文件會(huì)覆蓋掉原來上傳的文件,為了解決這一問題,可以在文件名前面加入當(dāng)前時(shí)間的毫秒值即可。

防止文件覆蓋,將數(shù)據(jù)存儲(chǔ)可改成下面這種寫法:

fileItem.write(new File( "F:\\" + System.currentTimeMillis() + fileItem.getName()));

總結(jié)

以上是生活随笔為你收集整理的java 文件上传 jar_JavaWeb 之 使用 commons-fileupload.jar 实现文件上传的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。