1. 程式人生 > >SpringMVC中使用CommonsMultipartResolver進行檔案上傳

SpringMVC中使用CommonsMultipartResolver進行檔案上傳

概述:

CommonsMultipartResolver是基於Apache的Commons FileUpload來實現檔案上傳功能的。所以在專案中需要相應的jar檔案。

FileUpload版本要求1.2及以上。相應的gradle配置:

"commons-fileupload:commons-fileupload:1.2.2"

上傳方法的實現

1. 程式碼方式

直接在controler中new一個CommonsMultipartResolver。

@Controller
@RequestMapping(value = "/file")
public class
FileController {
@RequestMapping(value = "/commUploadA") @ResponseBody public JSONObject commUploadA(HttpServletRequest request) { JSONObject json = new JSONObject(); json.put("succ", false); try { //直接new一個CommonsMultipartResolver CommonsMultipartResolver cmr = new
CommonsMultipartResolver(request.getServletContext()); cmr.setDefaultEncoding("utf-8"); cmr.setMaxInMemorySize(40960); cmr.setMaxUploadSize(10485760000L); if (cmr.isMultipart(request)) { MultipartHttpServletRequest multipartRequest = cmr.resolveMultipart(request); MultipartFile file = multipartRequest.getFile("uploadFile"
);// 與頁面input的name相同 File imageFile = new File("d:/upload1.jpg");// 上傳後的檔案儲存目錄及名字 file.transferTo(imageFile);// 將上傳檔案儲存到相應位置 json.put("succ", true); return json; } } catch (Exception e) { e.printStackTrace(); } return json; } }

2. Xml方式

通過spring配置一個名為”multipartResolver”的bean。

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="utf-8"></property>
    <property name="maxUploadSize" value="10485760000"></property>
    <property name="maxInMemorySize" value="40960"></property>
</bean>

controller中的方法做相應修改。

@Controller
@RequestMapping(value = "/file")
public class FileController {

    @RequestMapping(value = "/commUploadB")
    @ResponseBody
    public JSONObject commUploadB(MultipartHttpServletRequest request) {//引數型別不同
        JSONObject json = new JSONObject();
        json.put("succ", false);
        try {
            MultipartFile file = request.getFile("uploadFile");// 與頁面input的name相同
            File imageFile = new File("d:/upload2.jpg");// 上傳後的檔案儲存目錄及名字
            file.transferTo(imageFile);// 將上傳檔案儲存到相應位置
            json.put("succ", true);
            return json;
        } catch (Exception e) {
            e.printStackTrace();
            return json;
        }
    }
}

兩種方法的區別:

  1. 將CommonsMultipartResolver的例項化由程式碼實現改為了xml配置實現。
  2. 方法中的引數型別由HttpServletRequest變為了MultipartHttpServletRequest。

而上傳的獲取和儲存邏輯沒有變化。

注意:

在使用xml方式時,bean的名字必須為:multipartResolver。可在org.springframework.web.servlet.DispatcherServlet中找到原因:

public class DispatcherServlet extends FrameworkServlet {

    /** Well-known name for the MultipartResolver object in the bean factory for this namespace. */
    public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver";

    ......
    /**
     * Initialize the MultipartResolver used by this class.
     * <p>If no bean is defined with the given name in the BeanFactory for this namespace,
     * no multipart handling is provided.
     */
    private void initMultipartResolver(ApplicationContext context) {
        try {
            this.multipartResolver = context.getBean(MULTIPART_RESOLVER_BEAN_NAME, MultipartResolver.class);
            if (logger.isDebugEnabled()) {
                logger.debug("Using MultipartResolver [" + this.multipartResolver + "]");
            }
        }
        catch (NoSuchBeanDefinitionException ex) {
            // Default is no multipart resolver.
            this.multipartResolver = null;
            if (logger.isDebugEnabled()) {
                logger.debug("Unable to locate MultipartResolver with name '" + MULTIPART_RESOLVER_BEAN_NAME +
                        "': no multipart request handling provided");
            }
        }
    }
    ......
}

簡要分析CommonsMultipartResolver

CommonsMultipartResolver實現介面org.springframework.web.multipart.MultipartResolver,主要作用是將HttpSerlvetRequest封裝成MultipartHttpServletRequest。

public interface MultipartResolver {
    ......
    MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException;
    ......
}

具體的封裝方法參考CommonsMultipartResolver對resolveMultipart的實現:

org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(javax.servlet.http.HttpServletRequest)

相關推薦

JQueryAjax使用SpringMVCMultipartFile進行檔案的整合

對於一個帶有檔案上傳的表單,後臺使用springMVC封裝的MultipartFile file接收檔案,並且需要使用非同步提交,並返回相應的提示資訊 在這種情況下,我最開始使用了好幾種方法 第一種:普通的JQUERY的AJAX,但是後臺一旦使用MultipartFile

SpringMVC使用CommonsMultipartResolver進行檔案

概述: CommonsMultipartResolver是基於Apache的Commons FileUpload來實現檔案上傳功能的。所以在專案中需要相應的jar檔案。 FileUpload版本要求1.2及以上。相應的gradle配置: "co

SpringMVC使用FileUpload進行檔案

匯入FileUpload和common-io的Jar包 注意:1、Struts2需要使用其他方法:struts2過濾時,會改變reqeust的型別,由HttpServletRequest變成MultiPartRequestWrapper 1、Test.jsp: <f

springMVC檔案,MultipartHttpServletRequest、MultipartFile進行檔案

這裡使用apache的開源jar包完成上傳功能,使用jar包分別是:common-fileupload.jar和common-io.jar  先編寫上傳檔案幫助類,如果需要區分檔案型別,可以將檔案字尾擷取進行判斷; springmvc-mvc.xml配置,這裡主要配置spri

SpringMVC+Postman進行檔案測試

                              SpringMVC+Postman進行檔案上傳測試   一、軟體下載

springmvc Excel檔案,使用ajaxSubmit方法進行檔案,使用彈出層彈出一個框(jquery layer),點選進行下載

效果: 彈出層使用的是jquery外掛layer  外掛下載地址http://download.csdn.net/detail/rendeyishi/8048139 因為我是使用的是jquery裡面的ajaxSubmit進行檔案上傳 所以這個jquery.form.js必

Java專案對MongoDB資料庫進行檔案

import com.mongodb.MongoClient; import com.mongodb.client.MongoDatabase; import com.mongodb.client.gridfs.GridFSBucket; import com.mongodb.client.gridfs.G

Idea使用Springboot和webuploader外掛進行檔案

關於使用webuploader進行初步的檔案上傳,做一個筆記。 開發工具: IntelliJ IDEA 使用框架: SpringBoot 前端頁面: FreeMaker 專案準備 引入需要的jar包 <depe

SpringMVC使用ajaxfileupload非同步圖片檔案視訊

摘要:一、在專案中匯入commons-fileupload-1.3.1.jarcommons-io-2.4.jar 兩個jar包,引入專案中。、二、並在Spring-mvc.xml中配置multipart的上傳解析器,這裡上傳的都是通過multipart這個類<!--

SpringMVC的文件

.get 界面 org 存在 編碼格式 docx 後綴 cti 時間 SpringMVC中的文件上

SpringMVC學習(九)——SpringMVC實現文件

enc 一個人 ast max fonts common clas c學習 本地磁盤 這一篇博文主要來總結下SpringMVC中實現文件上傳的步驟。但這裏我只講單個文件的上傳。 環境準備 SpringMVC上傳文件的功能需要兩個jar包的支持,如下: 工程中肯定要導入

SpringMVC響應檢視丶檔案丶異常處理丶攔截器

SpringMVC響應資料和結果檢視 返回值分類 返回字串 Controller方法返回字串可以指定邏輯檢視的名稱,根據檢視解析器為物理檢視的地址。 引數可以寫一個Model來儲存域物件中的值 應用例子: @Controller @Req

webupload外掛,單個檔案處理

上傳外掛如何使用,我這裡就不多說了,網上大把教程。今天我要講的是如何限制上傳一個檔案,以及當檔案選擇錯誤是,再重新選擇檔案導致的問題。 預設給上傳外掛支援多檔案上傳,但是我們有很多需求是之上傳單個檔案,下面就來一起學習學習吧! 外掛html <div class="form-g

Yii框架使用Curl進行檔案(微信公眾號)

public function actionUpload(){ $type = Yii::$app->request->post('type'); //獲取token $token = Yii::$app->cache->get($this->t

**#使用springboot進行檔案和下載**

使用springboot進行檔案上傳和下載 ##檔案下載功能的實現思路: 1.獲取要下載的檔案的絕對路徑 2.獲取要下載的檔名 3.設定content-disposition響應頭控制瀏覽器以下載的形式開啟檔案 4.獲取要下載的檔案輸入流 5.建立資料緩衝區//緩衝區解釋

SpringMVC(六)檔案

SpringMVC(六)檔案上傳 Spring MVC對上傳檔案的支援 首先,DispatcherServlet會使用介面卡模式,將HttpServletRequest介面物件轉換為MultipartHttpServertRequest物件。MultipartHttpServet

使用SecureCRT如何進行檔案

使用SecureCRT如何進行檔案上傳 聽語音   | 瀏覽:3221 | 更新:2017-09-14 12:06 1 2 3 4 5 6 7 分步閱讀 在部署專

SpringMVC筆記八之檔案下載

一、檔案上傳 1、普通檔案上傳 新建頁面WebContent/file.jsp <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

<SpringMvc>入門五 檔案

檔案上傳的必要條件:   1.form表單的enctype取值必須是:mutipart/form-data (預設是:application/x-www-form-urlencoded)   2.method屬性為:post   3.提供一個文字選擇域<input type="file" />

Vue 實現 拖拽檔案到網頁進行檔案【JS/JQ 原理也是一樣的】

效果: 拖入檔案前: 拖入檔案後: html: <div id="select_frame"> <div ref="select_frame" class=