Téléchargement de fichiers (Télécharger)


Le module WebMVC est très simple pour le traitement du téléchargement de fichiers et les opérations sur les fichiers téléchargés. Cela peut être facilement effectué via des annotations :

  • @FileUpload : déclare que la méthode du contrôleur doit traiter le flux de fichiers téléchargés. , Ce qu'il faut noter, c'est l'attribut form enctype pour le traitement du téléchargement de fichiers :

      <form action="/demo/upload" method="POST" enctype="multipart/form-data">
      ......
      </form>

    IUploadFileWrapper : interface de wrapper de fichier de téléchargement, fournissant une série de méthodes pour exploiter les fichiers téléchargés
  • Exemple de code :

@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();
    }
}

Paramètres de configuration liés au téléchargement de fichiers :

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

# 文件上传临时目录,为空则默认使用: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=

Configuration de l'écouteur d'état de téléchargement de fichiers (upload_file_listener_class) :
Le téléchargement de fichiers du module WebMVC est basé sur le composant Apache Commons FileUpload, il est donc fourni par lui-même L'interface ProgressListener peut être utilisée pour surveiller l'état de téléchargement des fichiers ;

Exemple de code : implémenter le calcul de la progression des fichiers téléchargés

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);
    }
}

Configurez la classe d'implémentation de l'interface dans ymp.configs. Paramètre webmvc.upload_file_listener_class ;
  • Obtenez la valeur de progression dans la session via la méthode round-robin chronométrée Ajax et affichez-la sur la page ;