zoukankan      html  css  js  c++  java
  • FormDataMultiPart获取表单文件的大小

        在完成springboard某个功能时遇到个问题,前端表单上传了个文件,服务端接收的是FormDataMultiPart,希望通过FormDataMultiPart拿到上传文件的size。
        一开始获取文件的InputStream拿,但是InputStream真正实例是org.jvnet.mimepull.DataHead.ReadMultiStream,ReadMultiStream没有实现available方法,所以拿不到file size;后面尝试在FormDataContentDisposition里面拿,也拿不到;最后找了一些网站文章,研究了一下源码,发现可以获取服务器临时缓存文件的java.io.File实例,这里可以拿到size
    
    测试代码:
    
    @Transactional
    @POST
    @Path("/upload")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public FileUploadResultDto upload(FormDataMultiPart formData) {
        try {
    	CommonLogic.checkLoginFromSessionAndThrowException(request);
    	List filePartList = FileLogic.filterInvalidFile(formData.getFields("addFile"));
    	for (FormDataBodyPart filePart : filePartList) {
    	    InputStream inputStream = filePart.getValueAs(InputStream.class);
    	    System.out.println("InputStream size:" + inputStream.available());
    
    	    FormDataContentDisposition disposition = filePart.getFormDataContentDisposition();
    	    System.out.println("disposition size:" + disposition.getSize());
    
                java.io.File file = filePart.getValueAs(java.io.File.class);
    	    System.out.println("File size:" + file.length());
    	}
    	return null;
    	} catch (IOException e) {
    			throw new RuntimeException("???");
    	}
    }
    
    打印结果:
    InputStream size:0
    disposition size:-1
    File size:3979
    
    总结:
    FormDataMultiPart获取file的FormDataBodyPart,通过FormDataBodyPart.getValueAs(java.io.File.class)方法拿到ava.io.File实例,File.length()就是上传文件的size
    
  • 相关阅读:
    服务限流原理及算法
    Kafka 与 RabbitMQ 如何选择使用哪个?
    分布式事务之最终一致性实现方案
    如何在Ubuntu 14.04中使用systemctl?
    postgresql13 for window 安装及备份还原数据
    手把手教大家在mac上用VMWare虚拟机装Ubuntu
    在Mac平台上使用Multipass安装Ubuntu虚拟机
    如何在markdown中插入js和css
    HTML5标签
    linux
  • 原文地址:https://www.cnblogs.com/dken/p/FormDataMultiPart-file-size.html
Copyright © 2011-2022 走看看