SpringMVC基礎-7-文件上傳處理

圖片上傳處理

1,配置虛擬目錄

由於圖片常用的需要靜態的訪問環境,tomcat開虛擬目錄的方式做了幾次都失敗了,所以我做做了一個apache的服務,將apache的啓動路徑設置爲我存放上傳文件的位置。
這裏寫圖片描述
這圖顯示了需要改的路徑,然後啓動apache,測試一下localhost的訪問是否可以。

2,配置解析器

!-- 文件上傳 -->
<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 設置上傳文件的最大尺寸爲5MB -->
    <property name="maxUploadSize">
        <value>5242880</value>
    </property>
</bean>

3,使用一個上傳組件uploadfy(h5)

關於上傳組件的內容我做了一個關於uploadfy的小例子。
這個組件是在csdn上下載的,依賴不粘貼了,看一下jsp的代碼。

<form>
    <input id="file_upload" name="file_upload" type="file" multiple="true">
    <a style="position: relative; top: 3%;" href="javascript:$('#file_upload').uploadifive('upload')">UploadFiles</a>
    <div  id="queue" ></div>
    <img id="result" alt="" src="">
</form>
    $(function() {
        $('#file_upload').uploadifive({
            'auto' : false,
            'queueID' : 'queue',
            'uploadScript' : 'file/onefile',
            'onUploadComplete' : function(file, data) {
                var jsonData =JSON.parse(data);
                alert(jsonData);
                $('#result').attr("src",jsonData.data);

            }
        });
    });

在html中,input代表了可選的上傳組件,在js中設置了上傳方法和回調。在看一下controller

@RequestMapping("/onefile")
@ResponseBody
public RemmoResult oneFileUpload(MultipartHttpServletRequest request, HttpServletResponse response) {

    //1. build an iterator
       Iterator<String> itr =  request.getFileNames();
       CommonsMultipartFile file=null;

     //2. get each file
       while(itr.hasNext()){

           //2.1 get next MultipartFile
        file = (CommonsMultipartFile) request.getFile(itr.next()); 
           System.out.println(file.getOriginalFilename() +" uploaded! ");

           String fileName = file.getOriginalFilename();
        System.out.println("原始文件名:" + fileName);


        // 新文件名
        String newFileName = UUID.randomUUID() + fileName;
        // 獲得項目的路徑
        ServletContext sc = request.getSession().getServletContext();

        // 上傳位置
        // String path = sc.getRealPath("/img") + "\\"; // 設定文件保存的目錄

        File f = new File(path);
        if (!f.exists())
            f.mkdirs();
        if (!file.isEmpty()) {
            try {
                FileOutputStream fos = new FileOutputStream(path + newFileName);
                InputStream in = file.getInputStream();
                int b = 0;
                while ((b = in.read()) != -1) {
                    fos.write(b);
                }
                fos.close();
                in.close();
                return RemmoResult.ok("http://localhost/"+newFileName);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

       }
    return null;


}

我們使用MultipartHttpServletRequest來接傳過來的數據,獲得數組後再循環遍歷,將這個文件寫到我們的設置的apache的路徑中,我用了一個共同的返回值,這個返回值是一個

{
"status":"0",
"msg":"",
"data":"返回數據"
}

這種類型的對象,在前端可以接到json字符串,轉成json對象後就可以直接使用了。

這裏主要就是記錄一下上傳的功能,一個具體的上傳組件,我還需要再封裝一下。初學者弄起來還是不容易啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章