#概述:
将Spring MultipartFile转换为File文件,都有哪些方法。
#MultipartFile#getBytes
MultipartFile有一个getBytes()方法,它可以返回文件内容的字节数组。我们可以使用这个方法将字节写入文件。
MultipartFile multipartFile = new MockMultipartFile("sourceFile.tmp", "Hello World".getBytes());
File file = new File("src/main/resources/targetFile.tmp");
try (OutputStream os = new FileOutputStream(file)) {
os.write(multipartFile.getBytes());
}
assertThat(FileUtils.readFileToString(new File("src/main/resources/targetFile.tmp"), "UTF-8"))
.isEqualTo("Hello World");
getBytes()方法对于我们想在写入磁盘之前对文件进行额外操作的情况很有用,比如计算文件哈希值。
#MultipartFile#getInputStream
接下来,我们来看看MultipartFile的getInputStream()方法。
MultipartFile multipartFile = new MockMultipartFile("sourceFile.tmp", "Hello World".getBytes());
InputStream initialStream = multipartFile.getInputStream();
byte[] buffer = new byte[initialStream.available()];
initialStream.read(buffer);
File targetFile = new File("src/main/resources/targetFile.tmp");
try (OutputStream outStream = new FileOutputStream(targetFile)) {
outStream.write(buffer);
}
assertThat(FileUtils.readFileToString(new File("src/main/resources/targetFile.tmp"), "UTF-8"))
.isEqualTo("Hello World");
这里我们使用getInputStream()方法来获取InputStream,从InputStream中读取字节,并将它们存储在字节[]缓冲区中。然后我们创建一个File和OutputStream来写入缓冲区的内容。
getInputStream()方法在我们需要将InputStream包裹在另一个InputStream中的情况下非常有用,比如说,如果上传的文件是gzip的,那么GZipInputStream就很有用。
#MultipartFile#transferTo
最后,我们来看看MultipartFile的transferTo()方法。
MultipartFile multipartFile = new MockMultipartFile("sourceFile.tmp", "Hello World".getBytes());
File file = new File("src/main/resources/targetFile.tmp");
multipartFile.transferTo(file);
assertThat(FileUtils.readFileToString(new File("src/main/resources/targetFile.tmp"), "UTF-8"))
.isEqualTo("Hello World");
使用transferTo()方法, 我们只需要创建一个我们想要写入字节的文件, 然后把这个文件传递给transferTo()方法.
当MultipartFile只需要写入一个File时,transferTo()方法就很有用。