文件上傳(Upload)

2018-12-24 22:47 更新

WebMVC模塊針對文件的上傳處理以及對上傳的文件操作都非常的簡單,通過注解就輕松搞定:

  • @FileUpload:聲明控制器方法需要處理上傳的文件流;

    無參數(shù),需要注意的是文件上傳處理的表單enctype屬性:

      <form action="/demo/upload" method="POST" enctype="multipart/form-data">
      ......
      </form>
    
  • IUploadFileWrapper:上傳文件包裝器接口,提供對已上傳文件操作的一系列方法;

示例代碼:

@Controller
@RequestMapping("/demo)
public class UploadController {

    // 處理單文件上傳
    @RequestMapping(value = "/upload", method = Type.HttpMethod.POST)
    @FileUpload
    public IView doUpload(@RequestParam
                          IUploadFileWrapper file) throws Exception {
        // 獲取文件名稱
        file.getName();

        // 獲取文件大小
        file.getSize();

        // 獲取完整的文件名及路徑
        file.getPath();

        // 獲取文件Content-Type
        file.getContentType();

        // 轉(zhuǎn)移文件
        file.transferTo(new File("/temp", file.getName()));

        // 保存文件
        file.writeTo(new File("/temp", file.getName());

        // 刪除文件
        file.delete();

        // 獲取文件輸入流對象
        file.getInputStream();

        // 獲取文件輸出流對象
        file.getOutputStream();

        return View.nullView();
    }

    // 處理多文件上傳
    @RequestMapping(value = "/uploads", method = Type.HttpMethod.POST)
    @FileUpload
    public IView doUpload(@RequestParam
                          IUploadFileWrapper[] files) throws Exception {

        // ......

        return View.nullView();
    }
}

文件上傳相關(guān)配置參數(shù):

#-------------------------------------
# 文件上傳配置參數(shù)
#-------------------------------------

# 文件上傳臨時目錄,為空則默認(rèn)使用:System.getProperty("java.io.tmpdir")
ymp.configs.webmvc.upload_temp_dir=

# 上傳文件大小最大值(字節(jié)),默認(rèn)值:-1(注:10485760 = 10M)
ymp.configs.webmvc.upload_file_size_max=

# 上傳文件總量大小最大值(字節(jié)), 默認(rèn)值:-1(注:10485760 = 10M)
ymp.configs.webmvc.upload_total_size_max=

# 內(nèi)存緩沖區(qū)的大小,默認(rèn)值: 10240字節(jié)(=10K),即如果文件大于10K,將使用臨時文件緩存上傳文件
ymp.configs.webmvc.upload_size_threshold=

# 文件上傳狀態(tài)監(jiān)聽器,可選參數(shù),默認(rèn)值為空
ymp.configs.webmvc.upload_file_listener_class=

文件上傳狀態(tài)監(jiān)聽器(upload_file_listener_class)配置:

WebMVC模塊的文件上傳是基于Apache Commons FileUpload組件實現(xiàn)的,所以通過其自身提供的ProgressListener接口即可實現(xiàn)對文件上傳狀態(tài)的監(jiān)聽;

示例代碼:實現(xiàn)上傳文件的進(jìn)度計算;

public class UploadProgressListener implements ProgressListener {

    public void update(long pBytesRead, long pContentLength, int pItems) {
        if (pContentLength == 0) {
            return;
        }
        // 計算上傳進(jìn)度百分比
        double percent = (double) pBytesRead / (double) pContentLength;
        // 將百分比存儲在用戶會話中
        WebContext.getContext().getSession().put("upload_progress", percent);
    }
}
  • 將該接口實現(xiàn)類配置到 ymp.configs.webmvc.upload_file_listener_class 參數(shù)中;

  • 通過Ajax定時輪循的方式獲取會話中的進(jìn)度值,并展示在頁面中;

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號