파일 업로드(업로드)


WebMVC 모듈은 파일 업로드 처리 및 업로드된 파일 작업이 매우 간단합니다. 주석을 통해 쉽게 수행할 수 있습니다.

  • @FileUpload: 컨트롤러 메서드가 업로드된 파일 스트림을 처리해야 한다고 선언합니다. , 주목해야 할 것은 파일 업로드 처리를 위한 양식 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();

        // 转移文件
        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();
    }
}

파일 업로드 관련 구성 매개변수:

#-------------------------------------
# 文件上传配置参数
#-------------------------------------

# 文件上传临时目录,为空则默认使用:System.getProperty("java.io.tmpdir")
ymp.configs.webmvc.upload_temp_dir=

# 上传文件大小最大值(字节),默认值:-1(注:10485760 = 10M)
ymp.configs.webmvc.upload_file_size_max=

# 上传文件总量大小最大值(字节), 默认值:-1(注:10485760 = 10M)
ymp.configs.webmvc.upload_total_size_max=

# 内存缓冲区的大小,默认值: 10240字节(=10K),即如果文件大于10K,将使用临时文件缓存上传文件
ymp.configs.webmvc.upload_size_threshold=

# 文件上传状态监听器,可选参数,默认值为空
ymp.configs.webmvc.upload_file_listener_class=

파일 업로드 상태 리스너(upload_file_listener_class) 구성:
WebMVC 모듈의 파일 업로드는 Apache Commons FileUpload 구성 요소를 기반으로 하므로 다음과 같습니다. 자체 제공 ProgressListener 인터페이스를 사용하여 파일 업로드 상태를 모니터링할 수 있습니다.

샘플 코드: 업로드된 파일의 진행률 계산을 구현합니다.

public class UploadProgressListener implements ProgressListener {

    public void update(long pBytesRead, long pContentLength, int pItems) {
        if (pContentLength == 0) {
            return;
        }
        // 计算上传进度百分比
        double percent = (double) pBytesRead / (double) pContentLength;
        // 将百分比存储在用户会话中
        WebContext.getContext().getSession().put("upload_progress", percent);
    }
}

인터페이스 구현 클래스를 ymp.configs로 구성합니다. webmvc.upload_file_listener_class 매개변수 ;
  • Ajax 시간 제한 라운드 로빈 방식을 통해 세션의 진행률 값을 가져와서 페이지에 표시합니다.