我使用下面的代码将.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格式。 什么是问题?
答案 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();