我使用guava和apache commons来转换从服务器加载的临时映像,但转换结果是一个损坏的文件。 “sampleFile”被破坏的问题,我不知道为什么直到我没有错误。
import com.google.common.io.Files;
import org.apache.commons.codec.binary.Base64;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;
public class imageDecoder {
public static void main(String[] args) {
byte[] data = null;
final File input = new File("C:\\Users\\xxx\\AppData\\Local\\Temp\\multipartBody2180016028702918119asTemporaryFile");
try {
data = Base64.decodeBase64(Files.toByteArray(input));
} catch (Exception ex) {
System.out.print("problem");
}
final File f = new File(String.format("sampleFile_%s.jpg", UUID.randomUUID()));
try {
if (!f.exists())
f.createNewFile();
final FileOutputStream fos = new FileOutputStream(f);
fos.write(data);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
System.out.print("file not found");
} catch (IOException e) {
System.out.print("exception");
}
}
}
答案 0 :(得分:0)
根据您的评论,听起来原始文件(input
)包含图像的实际字节。但由于某种原因,您将读取这些字节,就好像它们是图像的Base 64编码的ASCII表示一样。显然他们不是,所以你为什么要这样做?如果您跳过Base64.decodeBase64
步骤,我猜测事情会按预期运行。
当然,在这种情况下,您所做的只是将input
的字节复制到f
,这样做更简单,更有效:
Files.copy(input, f);
或者,如果您不需要将临时文件保留在原来的位置,那么移动文件会更好:
Files.move(input, f);