[英]Android: write bytes to image file on SD Card
我正在嘗試在sd卡上創建圖像文件,並從服務器在調用網絡服務(基本上是:下載文件)后向我發送的字節中構建該圖像文件。 我設法在客戶端獲得了“東西”,並嘗試使用以下命令將這些字節寫入文件中:
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,但已損壞)。 我最終使用文本編輯器在計算機上打開了該文件,並且看到一些初始文件數據(發送之前)與最終文件不同。 因此,我猜測存在某種編碼錯誤或類似的錯誤。 我想知道如何進行這項工作(從網絡服務器下載圖像文件,然后在手機上打開)。 PS。 我還可以更改或獲取有關服務器配置的信息,因為它是由我的一個朋友配置的。 PS2。 我應該不僅可以下載圖像,還可以下載任何類型的文件。
首先,請確保您對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....
我認為最好將圖像編碼到服務器中的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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.