簡體   English   中英

Android:將字節寫入SD卡上的圖像文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM