我正在尝试在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。我应该不能只下载图像,而是任何类型的文件。
答案 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;
}
}