【问题标题】:Retrieve uploaded file attributes from Spring MultipartFile从 Spring MultipartFile 中检索上传的文件属性
【发布时间】:2019-01-20 07:32:47
【问题描述】:

我正在使用 Spring MultipartFile 上传文件。我需要存储上传的文件属性,如创建日期和修改日期。目前我正在使用以下方法:

File dest = new File(uploadfile.getOriginalFilename());
dest.createNewFile(); 
FileOutputStream fos = new FileOutputStream(dest); 
fos.write(uploadfile.getBytes());
fos.close(); 

Path filee = dest.toPath();

BasicFileAttributes attr = Files.readAttributes(filee, BasicFileAttributes.class);

System.out.println("creationTime: " + attr.creationTime());
System.out.println("lastAccessTime: " + attr.lastAccessTime());
System.out.println("lastModifiedTime: " + attr.lastModifiedTime());

其中uploadfile是spring boot MultipartFile的对象。

参考链接:

How to convert a multipart file to File?

Get java.nio.file.Path object from java.io.File

Determine file creation date in Java

问题是我将创建日期和修改日期仅作为当前日期,可能原因是新文件对象正在重置这些值。如何获取原始上传文件的属性?

【问题讨论】:

  • 我觉得原始上传文件的属性很难获取,但是可以从其他请求参数如?creationTime=xx&lastAccessTime=xx中获取这些值

标签: file spring-boot


【解决方案1】:

文件元数据(如您的 creationTime、lastAccessTime、lastModifiedTime)不是文件的一部分,而是文件系统的一部分。因此,通过上传文件,您只能获取文件,而不是文件系统管理的附加(元)数据。

您可以在 File API 的帮助下将最后修改日期添加到上传表单(不支持访问和创建),但是这些可以由用户操纵,因此您不能信任它们,如果那不是问题给你一个例子:https://developer.mozilla.org/en-US/docs/Web/API/File/lastModified

html:

<!-- inside your form -->
<input type="file" multiple id="fileInput">

javascript:

const fileInput = document.getElementById('fileInput');
fileInput.addEventListener('change', function(event) {
  // files is a FileList object (similar to NodeList) 
  const files = event.target.files;

  for (let i = 0; i < files.length; i++) {
    const date = new Date(files[i].lastModified);
    alert(files[i].name + ' has a last modified date of ' + date);
    // TODO add the date as a hidden input to your form
  }
});

【讨论】:

    猜你喜欢
    • 2011-08-01
    • 2011-11-06
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2014-09-10
    相关资源
    最近更新 更多