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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java web 文件上传工具类_JavaWeb中实现文件上传的方式有哪些?

發布時間:2024/9/27 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java web 文件上传工具类_JavaWeb中实现文件上传的方式有哪些? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上回我們說了下文件下載的方式有哪些,這次我們從不同的環境下簡單來說說文件上傳的方式有哪些。

文件上傳的方式Servlet2.5 方式

Servlet3.0 方式

SpringMVC 方式

案例實操

Servlet2.5 方式

文件上傳涉及到前臺頁面的編寫和后臺服務器端代碼的編寫,前臺發送文件,后臺接收并保存文件,這才是一個完整的文件上傳。

1) 前臺頁面

在做文件上傳的時候,會有一個上傳文件的界面,首先我們需要一個表單,并且表單的請求方式為 POST;其次我們的 form 表單的 enctype 必須設為”multipart/form-data”即 enctype="multipart/form-data" 意思是設置表單的 MIME 編碼。默認情況下這個編碼格式是 ”application/x-www-form-urlencoded”,不能用于文件上傳;只有使用了 multipart/form-data 才能完整地傳遞文件數據。

上傳文件

文件:

2) 后臺 commons-fileupload 的使用

首先需要導入第三方jar包,http://commons.apache.org/ ?下載 commons-io 和 commons-fileupload 兩個jar的資源。解壓并導入到項目中。commons-fileupload.jar 是文件上傳的核心包 commons-io.jar 是 fileupload 的依賴包,同時又是一個工具包。

介紹一下使用到的幾個核心類

DiskFileItemFactory – 設置磁盤空間,保存臨時文件。只是一個工具類

ServletFileUpload – 文件上傳的核心類,此類接收 request,并解析

ServletFileUpload.parseRequest(request); – List 解析 request

1、創建一個 DiskFileItemFactory 工廠類,并制定臨時文件和大小

2、創建 ServletFileUpload 核心類,接收臨時文件,做請求的轉換

3、通過 ServletFileUpload 類轉換原始請求,得到 FileItem 集合

4、遍歷集合中的各個元素并處理

5、判斷每個元素是否是普通表單項,如果是則按照普通表單項處理

6、如果不是普通表單項,則是文件,通過處理的方式進行處理(上傳)

public class UploadServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 設定編碼,可以獲取中文文件名

request.setCharacterEncoding("UTF-8");

// 獲取tomcat下的upload目錄的路徑

String path = getServletContext().getRealPath("/upload");

// 臨時文件目錄

String tempPath = getServletContext().getRealPath("/temp");

// 檢查我們是否有文件上傳請求

// boolean isMultipart = ServletFileUpload.isMultipartContent(req);

// 1、聲明DiskFileItemFactory工廠類,用于在指定磁盤上設置一個臨時目錄

DiskFileItemFactory disk = new DiskFileItemFactory(1024 * 10, new File(tempPath));

// 2、聲明ServletFileUpload,接收上面的臨時文件。也可以默認值

ServletFileUpload up = new ServletFileUpload(disk);

// 3、解析request

try {

List list = up.parseRequest(request);

if (list.size() > 0) {

for (FileItem file : list) {

// 判斷是否是普通的表單項

if (file.isFormField()) {

String fieldName = file.getFieldName();

// 中文亂碼,此時還需要指定獲取數據的編碼方式

// String value = file.getString();

String value = file.getString("UTF-8");

System.out.println(fieldName + "=" + value);

} else { // 說明是一個文件

// 獲取文件本身的名稱

String fileName = file.getName();

System.out.println(file.getFieldName());

// 處理文件名稱

fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);

System.out.println("old Name : " + fileName);

// 修改名稱

String extName = fileName.substring(fileName.lastIndexOf("."));

String newName = UUID.randomUUID().toString().replace("-", "") + extName;

// 保存新的名稱,并寫出到新文件中

file.write(new File(path + "/" + newName));

System.out.println("文件名是:" + fileName);

System.out.println("文件大小是:" + file.getSize());

file.delete();

}

}

}

} catch (FileUploadException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

}

Servlet3.0 方式

使用注解 @MultipartConfig 將一個 Servlet 標識為支持文件上傳。Servlet3.0 將 multipart/form-data 的 POST 請求封裝成 Part,通過 Part 對上傳的文件進行操作。

前臺

上傳文件

姓名:

文件:

后臺

@WebServlet("/upload")

@MultipartConfig

public class UploadServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println("上傳文件...");

// 設置編碼

request.setCharacterEncoding("UTF-8");

// 獲取普通表單項參數

String uname = request.getParameter("uname");

System.out.println(uname);

// 上傳文件

// 得到part對象 request.getpart(name):name代表的是表單中file元素的name屬性值

Part part = request.getPart("myfile");

// 得到文件存放的路徑

String path = request.getServletContext().getRealPath("/");

// 得到文件名

String fileName = part.getSubmittedFileName();

// 上傳

part.write(path + fileName);

}

}

SpringMVC 方式

Pom 文件修改 添加 commons-fileupload 依賴

commons-fileupload

commons-fileupload

1.3.2

servlet-context.xml

104857600

4096

FileController

import java.io.File;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.multipart.MultipartFile;

import org.springframework.web.multipart.MultipartHttpServletRequest;

import org.springframework.web.servlet.ModelAndView;

@Controller

public class FileController {

@RequestMapping("/uploadFile")

public ModelAndView uploadFile(HttpServletRequest request){

ModelAndView mv=new ModelAndView();

mv.setViewName("result");

MultipartHttpServletRequest mr=(MultipartHttpServletRequest) request;

MultipartFile multipartFile= mr.getFile("file");

String path=request.getSession().getServletContext().getRealPath("upload");

System.out.println(path);

if(null!=multipartFile&&!multipartFile.isEmpty()){

String fileName=multipartFile.getOriginalFilename();

try {

multipartFile.transferTo(new File(path,fileName));

mv.addObject("msg", "文件上傳成功!");

} catch (Exception e) {

mv.addObject("msg", "上傳失敗!");

e.printStackTrace();

}

}

return mv;

}

}

前臺表單

提交

擴展~MIME

MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開。多用于指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。

它是一個互聯網標準,擴展了電子郵件標準,使其能夠支持:

非ASCII字符文本;非文本格式附件(二進制、聲音、圖像等);由多部分(multiple parts)組成的消息體;包含非ASCII字符的頭信息(Header information)。

這個標準被定義在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 MIME改善了由RFC 822轉變而來的RFC 2822,這些舊標準規定電子郵件標準并不允許在郵件消息中使用7位ASCII字符集以外的字符。正因如此,一些非英語字符消息和二進制文件,圖像,聲音等非文字消息原本都不能在電子郵件中傳輸(MIME可以)。MIME規定了用于表示各種各樣的數據類型的符號化方法。 此外,在萬維網中使用的HTTP協議中也使用了MIME的框架,標準被擴展為互聯網媒體類型。

查看不同文件對應的 MIME 類型,推薦大家一種方式,以 Tomcat為例,它下面的 web.xml 文件可以查看所有的MIME類型,通過 Ctrl + F 搜索快速找到你想知道的文件對應的 MIME 類型。

總結

以上是生活随笔為你收集整理的java web 文件上传工具类_JavaWeb中实现文件上传的方式有哪些?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。