spring - 从 Spring MultipartFile 获取正确的文件大小

标签 spring spring-mvc

如何从org.​springframework.​web.​multipart.​MultipartFile找到正确的文件大小

double bytes = m.getSize();
double kilobytes = (bytes / 1024);
double megabytes = (kilobytes / 1024);     
 System.out.println(megabytes);

但它没有给出正确的尺寸。

此处m.getSize()返回2264855,但使用此方法它给出的文件大小约为2MB,但我的文件系统中的实际大小为8MB

private HashMap add(@RequestParam( value = "files", required = false) MultipartFile[] mPartFile){

    if(mPartFile != null && mPartFile.length>0){
        for(MultipartFile m:mPartFile){
            if(!CoreServices.isSupportedFile(m.getContentType())){
                hm.put("status", MConstants.OPERATION_FAILED);
                hm.put("reason", "File: "+m.getOriginalFilename()+" is not supported. Upload only jpeg, png, gif image files.");
                return hm;                
            }
            long size = m.getSize();
            if( size> MConstants.MAX_ALLOWED_FILE_SIZE){
                hm.put("status", MConstants.OPERATION_FAILED);
                hm.put("reason", "File: "+m.getName()+" is not acceptable, its size is more than 5MB.");
                return hm;                
            }            
        }
    }
}

此处,5MB 限制的 MAX_ALLOWED_FILE_SIZE 值为 5000000

最佳答案

您正在使用 MultipartFile 的方法 getSize(),我认为该方法以二进制形式返回字节大小。
因此,将其转换为 MB 时,您必须将 file.getSize()0.00000095367432 相乘。这将为您提供以 MB 为单位的大小。您可以验证here .

我也在用这个。我可以看到 Windows 中文件的大小为 18.9 KB,这是实际大小而不是磁盘上的大小。就我而言,我需要以 KB 为单位的信息,因此我将其乘以 0.0009765625,结果返回 18.9462890625 KB,这接近文件的大小,可能是 Windows 将其四舍五入。

我相信将 file.getSize()0.00000095367432 相乘会起作用。

关于spring - 从 Spring MultipartFile 获取正确的文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27175729/

相关文章:

java - Spring Kafka - 如何使用组 ID 将偏移量重置为最新?

java - Spring boot通用字符串修剪序列化

java - 使用 spring rest 模板在服务上传播 HTTP header (JWT token )

java - Spring boot AMQP并发监听器顺序执行?

Spring框架吞掉了自定义转换器的异常

java - ClassNotFoundException : org. springframework.cache.Cache$ValueRetrievalException 异常

java - 在 Controller 响应中使用 VelocityView 或纯文本?

Spring Boot 日志记录配置

java - 为什么BindingResult必须跟在@Valid后面呢?

java - 适用于多种用户类型的 Spring Security 和 Hibernate