Android使用Base64保存和检索Jpeg文件

时间:2014-06-14 16:02:03

标签: base64

我使用下面的代码将.jpeg文件内容作为Base64并将其发送到Web服务。

    public static String GetBase64File(String filepath)
{
    String ret="";
    byte[] bytes = null;
    try {
        bytes = readFile(filepath);         
    } catch (IOException e) {           
    }
    try {ret=Base64.encodeToString(bytes, Base64.DEFAULT);}catch (Exception e) {}
    return ret;
}

然后,我使用此代码将检索到的内容从Web服务保存为.jpeg文件:

    public static String SaveRetrievedAttachment(String data,String filename)
{
    Writer writer = null;       
    filename=Global.AppStorageTempsDir+UUID.randomUUID().toString().replaceAll("-", "")+getFileExtension(filename);
    byte[] AsBytes = Base64.decode(data.getBytes(), Base64.DEFAULT);        
    String outs=new String(AsBytes);
    File outputFile = new File(filename);
    try {
        writer = new BufferedWriter(new FileWriter(outputFile));
    } catch (IOException e) {}
    try {
        writer.write(outs);
    } catch (IOException e) {}
    try {
        writer.close();         
    } catch (IOException e) {}
    return filename;
}

但我的源.jpeg文件不相等检索.jpeg file.retrieved .jpeg文件不是已知的.jpeg格式。 什么是问题?

1 个答案:

答案 0 :(得分:1)

保存方法的问题:

    byte[] AsBytes = Base64.decode(data.getBytes(), Base64.DEFAULT);        
    String outs=new String(AsBytes);
    File outputFile = new File(filename);
    try {
        writer = new BufferedWriter(new FileWriter(outputFile));
    } catch (IOException e) {}
    try {
        writer.write(outs);
    } catch (IOException e) {}
    try {
        writer.close();         
    } catch (IOException e) {}

这是不正确的,你不能将二进制数据保存到字符串中(它会使数据变得清晰),你也可以使用字符流来保存二进制数据。

你应该使用FileOuputStream(缓冲与否)直接将文件保存在文件中,例如:

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filename));
bos.write(fileBytes);
bos.flush();
bos.close();