我正在使用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
问题是我仅将创建日期和修改日期作为当前日期,并且可能的原因是新文件对象正在重置这些值。如何获取原始上传文件的属性?
答案 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
}
});