使用Guava和apache常见的文件上传?

时间:2014-04-04 17:11:29

标签: guava apache-commons

我使用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");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

根据您的评论,听起来原始文件(input)包含图像的实际字节。但由于某种原因,您将读取这些字节,就好像它们是图像的Base 64编码的ASCII表示一样。显然他们不是,所以你为什么要这样做?如果您跳过Base64.decodeBase64步骤,我猜测事情会按预期运行。

当然,在这种情况下,您所做的只是将input的字节复制到f,这样做更简单,更有效:

Files.copy(input, f);

或者,如果您不需要将临时文件保留在原来的位置,那么移动文件会更好:

Files.move(input, f);