1. 在完成springboard某个功能时遇到个问题,前端表单上传了个文件,服务端接收的是FormDataMultiPart,希望通过FormDataMultiPart拿到上传文件的size
  2. 一开始获取文件的InputStream拿,但是InputStream真正实例是org.jvnet.mimepull.DataHead.ReadMultiStreamReadMultiStream没有实现available方法,所以拿不到file size;后面尝试在FormDataContentDisposition里面拿,也拿不到;最后找了一些网站文章,研究了一下源码,发现可以获取服务器临时缓存文件的java.io.File实例,这里可以拿到size
  3.  
  4. 测试代码:
  5.  
  6. @Transactional
  7. @POST
  8. @Path("/upload")
  9. @Produces(MediaType.APPLICATION_JSON)
  10. @Consumes(MediaType.MULTIPART_FORM_DATA)
  11. public FileUploadResultDto upload(FormDataMultiPart formData) {
  12. try {
  13. CommonLogic.checkLoginFromSessionAndThrowException(request);
  14. List filePartList = FileLogic.filterInvalidFile(formData.getFields("addFile"));
  15. for (FormDataBodyPart filePart : filePartList) {
  16. InputStream inputStream = filePart.getValueAs(InputStream.class);
  17. System.out.println("InputStream size:" + inputStream.available());
  18.  
  19. FormDataContentDisposition disposition = filePart.getFormDataContentDisposition();
  20. System.out.println("disposition size:" + disposition.getSize());
  21.  
  22. java.io.File file = filePart.getValueAs(java.io.File.class);
  23. System.out.println("File size:" + file.length());
  24. }
  25. return null;
  26. } catch (IOException e) {
  27. throw new RuntimeException("???");
  28. }
  29. }
  30.  
  31. 打印结果:
  32. InputStream size:0
  33. disposition size:-1
  34. File size:3979
  35.  
  36. 总结:
  37. FormDataMultiPart获取fileFormDataBodyPart,通过FormDataBodyPart.getValueAs(java.io.File.class)方法拿到ava.io.File实例,File.length()就是上传文件的size

FormDataMultiPart获取表单文件的大小的更多相关文章

  1. 表单文件上传,ajax文件上传

    原创链接:http://www.cnblogs.com/yanqin/p/5345562.html html代码  index.jsp(表单文件上传) <form action="sh ...

  2. Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据

    用servlet实现一个注册的小功能 ,后台获取数据. 注册页面: 注册页面代码 : <!DOCTYPE html> <html> <head> <meta ...

  3. javascript获取表单的各项值

    何谓表单? 表单是html页面中负责数据采集功能的部件,它往往由三个部分组成: 表单标签:<form></form> 用于声明表单的范围,位于表单标签中的元素将被提交.属性有m ...

  4. flask中的表单文件上传

    在表单中上传文件时,一定要加入 enctype="multipart/form-data" 属性 为什么要加入这个属性呢: enctype就是encodetype就是编码类型的意思 ...

  5. Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)

    form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...

  6. 用jQuery获取表单的值

    在日常开发过程中,有许多用到表单的地方.比如登录,注册,比如支付,填写订单,比如后台管理等等. 使用jQuery来获取表单的值是比较常见的做法. 常见表单 单行文字域:<input type=' ...

  7. PHP获取表单方法

    php接收HTML当表单提交的信息,数据将存储提交在全局阵列中,我们能够调用系统特定的自己主动全局变量数组来获取这些值.经常使用的自己主动全局变量例如以下所看到的: $_GET $_POST $_RE ...

  8. 快速获取表单多条数据,使用ajax传递给后台

    当表单中有多条数据需要向后台传递时,一个一个的获取显然是不可取的办法,可以借助表单的serialize()方法获取. HTML: <form id="form"> &l ...

  9. 前端表单提交数据~php获取表单内容

    上图代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

随机推荐

  1. react ReactDOMServer

    此文章是翻译ReactDOMServer这篇React(版本v15.4.0)官方文档. ReactDOMServer 如果你用script 标签来使用React,这些顶级APIs 将会在全局React ...

  2. Kubernetes集群部署DNS插件

    准备 kube-dns 相关镜像 准备 kube-dns 相关 yaml 文件 系统预定义的 RoleBinding 配置 kube-dns 相关服务 检查 kube-dns 功能 kube-dns ...

  3. LeetCode 232题用栈实现队列(Implement Queue using Stacks) Java语言求解

    题目链接 https://leetcode-cn.com/problems/implement-queue-using-stacks/ 题目描述 使用栈实现队列的下列操作: push(x) -- 将一 ...

  4. C++扬帆远航——12(抓小偷)

    /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:zhaoxiaotou.cpp * 作者:常轩 * 微信公众号: ...

  5. python 写入 execl 文件 之 xlwt 模块

    1. xlwt 安装 pip install xlwt 2. xlwt 操作, 代码 #!/usr/bin/env python3 import xlwt # 只能创建 新的 excel 文件 # 1 ...

  6. LeetCode---二叉树3-总结例题

    二叉树-总结例题 1-从中序与后序遍历序列构造二叉树 给定二叉树的后序遍历和二叉树的中序遍历 想法: 先根据后序遍历的最后一个元素构造根节点 寻找根节点在中序遍历中的位置 递归构建根节点的左右子树 / ...

  7. jsvascript篮球梦

    首先让我们先欣赏一下效果图: html文本: <div class="box"> <img id="imgshow" src="la ...

  8. AJAX 的 Ajax返回数据之前的loading等待效果(gif效果等)

    首先,我们通过ajax请求,向后台传递参数,然后后台经过一系列的运算之后向前台返还数据,我希望在等待数据成功返还之前可以展示一个loading.gif图 不废话,在页面上执行点击事件(<a sc ...

  9. 数据加密标准(DES)详解

    1 简介 1.1 历史 DES(Data Encryption Standard)是由IBM公司在1974年提出的加密算法,在1977年被NIST定位数据加密标准.随后的很多年里,DES都是最流行的对 ...

  10. webpack压缩图片之项目资源优化

    webpack打包时,会根据webpack.config.js 中url-loader中设置的limit大小来对图片进行处理,小于limit的图片转化成base64格式,其余的不做操作.对于比较大的图 ...