从Spring MultipartFile检索上传的文件属性

时间:2018-08-13 14:20:27

标签: file spring-boot

我正在使用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

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

1 个答案:

答案 0 :(得分: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
  }
});