Android:将字节写入SD卡上的图像文件

时间:2013-07-24 08:28:46

标签: android file encoding

我正在尝试在SD卡上创建一个图像文件,在调用Web服务(基本上是:下载文件)后,从服务器向我发送的字节构建它。 我设法在客户端获得“某些东西”,并尝试使用以下命令将这些字节写入文件:

FileOutputStream fOut = null;
BufferedOutputStream bOs = null;

try {
        fOut = new FileOutputStream(returnedFile);

        bOs = new BufferedOutputStream(fOut);

        bOs.write(bytesToWrite);

}
catch (FileNotFoundException e) {
        e.printStackTrace();
} 
catch (Exception e) {
        e.printStackTrace();
}
finally {
        try {
            if (bOs != null) {
                bOs.close();
                fOut.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

但图像文件已损坏(其大小> 0kb,但已损坏)。 我最终用文本编辑器在我的计算机上打开了该文件,我看到一些初始文件数据(在发送之前)与最终文件数据不同。所以我猜测有某种编码错误或类似的东西。 我很感激如何使这项工作(从Web服务器下载图像文件,并在我的手机上打开)。 PS。我也可以更改或获取有关服务器配置的信息,因为它是由我的一位朋友配置的。 PS2。我应该不能只下载图像,而是任何类型的文件。

2 个答案:

答案 0 :(得分:0)

首先请确保您在Android清单上拥有此权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>

文件流旨在用于本地文件存储而不是网络连接。请改用 URLConnection 类。

URL uri = new URL("Your Image URL");
URLConnection connection = uri.openConnection();
InputStream stream = connection.getInputStream();
//DO other stuff....

答案 1 :(得分:0)

我认为在服务器中将图像编码为Base64会更好,例如在PHP中你可以这样做:

$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);

然后在android中将Base64字符串解码为图像文件:

FileOutputStream fos = null;
try {

if (base64ImageData != null) {
    fos = context.openFileOutput("imageName.png", Context.MODE_PRIVATE);
    byte[] decodedString = android.util.Base64.decode(base64ImageData, android.util.Base64.DEFAULT);
    fos.write(decodedString);

    fos.flush();
    fos.close();

    }

} catch (Exception e) {

} finally {
    if (fos != null) {
        fos = null;
    }
}