SpringMVC使用MultipartFile文件上傳,多文件上傳,帶參數上傳


  • 一、配置SpringMVC
  • 二、單文件與多文件上傳
  • 三、多文件上傳
  • 四、帶參數上傳

一、配置SpringMVC
在spring.xml中配置:

 

    <!-- springmvc文件上傳需要配置的節點-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="-1"/>
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="resolveLazily" value="false"/>
        <property name="uploadTempDir" value="/statics/document/tempdir"/>
        <!--<property name="maxInMemorySize" value="104857600"/>-->
    </bean>

其中屬性詳解:
defaultEncoding="UTF-8" 是請求的編碼格式,默認為iso-8859-1
maxUploadSize="-1 是上傳文件的大小,單位為字節 -1表示無限制
uploadTempDir="fileUpload/temp" 為上傳文件的臨時路徑

 


二、單文件與多文件上傳
1、單文件上傳
jsp:

<body>  
<h2>文件上傳實例</h2>  


<form action="fileUpload.html" method="post" enctype="multipart/form-data">  
    選擇文件:<input type="file" name="file">  
    <input type="submit" value="提交">   
</form>  


</body>  

注意要在form標簽中加上enctype="multipart/form-data"表示該表單是要處理文件的!


controller:

    @RequestMapping("fileUpload")  
    public String fileUpload(@RequestParam(value = "file", required = false) MultipartFile file) {  
        // 判斷文件是否為空  
        if (!file.isEmpty()) {  
            try {  
                // 文件保存路徑  
                String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/"  
                        + file.getOriginalFilename();  
                // 轉存文件  
                file.transferTo(new File(filePath));  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
        // 重定向  
        return "redirect:/list.html";  
    }  



注意RequestParam參數中value的名字要與jsp中的相互匹配,否則會找不到返回空指針
transferTo是存儲文件的核心方法,但是這個方法同一個文件只能使用一次,不能使用第二次,否則tomcat服務器會報500的錯誤


MultipartFile類常用的一些方法:

String getContentType()//獲取文件MIME類型
InputStream getInputStream()//后去文件流
String getName() //獲取表單中文件組件的名字
String getOriginalFilename() //獲取上傳文件的原名
long getSize() //獲取文件的字節大小,單位byte
boolean isEmpty() //是否為空
void transferTo(File dest)//保存到一個目標文件中。


三、多文件上傳
與上面的相同只不過是form里面多創建幾個input
如果需要使用一個標簽控件上傳多個文件,需要使用js插件uploadify
博主備份的下載地址(該版本為flash版本,不推薦,HTML5版本請自行去官網下載):uploadify.rar(解壓密碼:crowsong.xyz): http://waternote.ctfile.net/fs/2276132-372974128   
jsp:

<body>  
    <h2>上傳多個文件 實例</h2>  


    <form action="filesUpload.html" method="post"  
        enctype="multipart/form-data">  
        <p>  
            選擇文件:<input type="file" name="files">  
        <p>  
            選擇文件:<input type="file" name="files">  
        <p>  
            選擇文件:<input type="file" name="files">  
        <p>  
            <input type="submit" value="提交">  
    </form>  
</body>  



controller:

  private boolean saveFile(MultipartFile file) {  
        // 判斷文件是否為空  
        if (!file.isEmpty()) {  
            try {  
                // 文件保存路徑  
                String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/"  
                        + file.getOriginalFilename();  
                // 轉存文件  
                file.transferTo(new File(filePath));  
                return true;  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
        return false;  
    }  

    @RequestMapping("filesUpload")  
    public String filesUpload(@RequestParam("files") MultipartFile[] files) {  
        //判斷file數組不能為空並且長度大於0  
        if(files!=null&&files.length>0){  
            //循環獲取file數組中得文件  
            for(int i = 0;i<files.length;i++){  
                MultipartFile file = files[i];  
                //保存文件  
                saveFile(file);  
            }  
        }  
        // 重定向  
        return "redirect:/list.html";  
    }  

 


四、帶參數上傳
還是使用form表單進行上傳,但是上傳文件的時候要帶上一部分的參數
例子form上傳使用多個input上傳多個文件並且攜帶參數
jsp:
其中使用了ajaxForm插件,並沒有展示出來

    <form method="post" enctype="multipart/form-data" id="uploadForm"
          action="${pageContext.request.contextPath}/background/worksInsert">
        作品名稱:<input type="text" name="name" id="name"><br>
        參賽年份:<input type="text" name="year" id="year"><br>
        參加競賽:<select name="competition" id="competition">
        <option value="請選擇">請選擇</option>
    </select><br>
        源文件上傳:<input type="file" name="file1" id="file1"><br>
        展示文件上傳:<input type="file" name="file2" id="file2"><br>
        附件上傳:<input type="file" name="file3" id="file3"><br>
        <input type="submit" value="提交">

    </form>

controller:
主要是參數的書寫,通過不同的value取到不同得文件,同時request.getParameter方法取到參數的值

  @RequestMapping("/worksInsert")
    @ResponseBody
    public MessageCarrier worksInsert(@RequestParam(value = "file1", required = false) MultipartFile file1, @RequestParam(value = "file2", required = false) MultipartFile file2, @RequestParam(value = "file3", required = false) MultipartFile file3, HttpServletRequest request) throws IOException {
        MessageCarrier messageCarrier = new MessageCarrier();
        if (file1 == null || request.getParameter("name") == null) {
            return null;
        }
// 獲取源文件存儲路徑
        String filename = request.getParameter("name");
        String sworks = savePathL("works") + "/" + filename;
        String vworks = savePathL("works") + "/" + filename;
        String fworks = savePathL("works") + "/" + filename;
        String sRealworks = System.getProperty("studentSystem.root") + sworks.substring(1, sworks.length());
        String sRealvworks = System.getProperty("studentSystem.root") + vworks.substring(1, vworks.length());
        String sRealfworks = System.getProperty("studentSystem.root") + fworks.substring(1, fworks.length());
        DBWorks dbWorks = new DBWorks();
        CompetitionWorks competitionWorks = new CompetitionWorks();
// System.out.println(request.getParameter("name"));
        competitionWorks.setWorksName(request.getParameter("name"));

        competitionWorks.setWorksYear(request.getParameter("year"));
        competitionWorks.setWorksComID(request.getParameter("competition"));
        competitionWorks.setWorksIsIndex("0");
        competitionWorks.setWorksNeedUpdate("0");
        competitionWorks.setWorksSavePath(sworks + "/" + file1.getOriginalFilename());
// 如果有展示文件獲取展示文件的存儲路徑
        if (file2 != null && file2.getSize() != 0) {
            competitionWorks.setWorksSaveViewPath(vworks + "/" + file2.getOriginalFilename());
        } else {
            competitionWorks.setWorksSaveViewPath("NULL");
        }
// 如果有附件的話獲取附件的存儲路徑並保存
        if (file3 != null && file3.getSize() != 0) {
            competitionWorks.setWorksSaveFilePath(fworks + "/" + file3.getOriginalFilename());
        } else {
            competitionWorks.setWorksSaveFilePath("NULL");
        }

//先將內容設置為NULL
        competitionWorks.setWorksContent("NULL");
        messageCarrier = dbWorks.worksInsert(competitionWorks);
        switch (messageCarrier.getMessageContent()) {
            case "OK": {
                FilesUpload filesUpload = new FilesUpload();
                messageCarrier = filesUpload.upload(file1, sRealworks);
                if (!competitionWorks.getWorksSaveViewPath().equals("NULL")) {
                    messageCarrier = filesUpload.upload(file2, sRealvworks);
                }
                if (!competitionWorks.getWorksSaveFilePath().equals("NULL")) {
                    messageCarrier = filesUpload.upload(file3, sRealfworks);
                }

//如果上傳成功則解析內容並將其錄入數據庫
                if (messageCarrier.getMessageContent().equals("OK")) {
                    String path = competitionWorks.getWorksSavePath();
                    String filePath = System.getProperty("studentSystem.root") + path;
                    String fileName = path.substring(path.lastIndexOf("/") + 1);
                    File file = new File(filePath);
//解析文件內容
                    FilesToContent filesToContent = new FilesToContent();
                    String content = filesToContent.resolve(file);
// System.out.println(content);
                    competitionWorks.setWorksContent(content);
                    messageCarrier = dbWorks.worksUpdateName(competitionWorks);
                }


            }
            break;
            default: {
                return messageCarrier;
            }
        }
        return messageCarrier;
    }




本文章筆記版本地址:http://ccdd6ec5.wiz03.com/share/s/3cTmX51TMQ-b2QTact03UPg83ItAml2XO4wJ23yjLa2bEKE1

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM