Сериализация объекта (jpg) во внутреннюю память - PullRequest
1 голос
/ 22 октября 2011

Я пытаюсь загрузить набор .jpg из Amazon S3 и сохранить их во внутреннем хранилище (чтобы злоумышленник не смог скопировать их) Я получил это далеко, но теперь я застрял. Я нашел несколько вопросов, которые касаются растровых изображений или массивов, но ничего не говорится о сохранении изображения и последующем доступе к нему. Кто-нибудь знает, куда я иду отсюда?

String itemName = iconNames.getString(iconNames.getColumnIndexOrThrow(DbAdapter.KEY_ICON));
        itemName = itemName + ".jpg";
        GetObjectRequest getObject = new GetObjectRequest(bucket, itemName);

        S3Object icon = mS3Client.getObject(getObject);
        InputStream input = icon.getObjectContent();

Я посмотрел здесь в руководстве разработчика, и он дает следующий код http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

String FILENAME = "hello_file";
String string = "hello world!";

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();

Но это для хранения строки, а не изображения ...

Ответы [ 2 ]

0 голосов
/ 22 октября 2011

Вы можете сделать что-то вроде следующего.

Bitmap bitmapPicture = someBitmap
String path = Environment.getExternalStorageDirectory().toString();
OutputStream fOut = null;
File file = new File(path, "tmp.png");
fOut = new FileOutputStream(file);

bitmapPicture.compress(Bitmap.CompressFormat.PNG, 100, fOut);
fOut.flush();
fOut.close();

MediaStore.Images.Media.insertImage(getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());
0 голосов
/ 22 октября 2011

Вы должны скопировать InputStream в OutputStream.Как то так:

InputStream input = icon.getObjectContent();
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);

// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = input.read(buf)) > 0) {
    fos.write(buf, 0, len);
}
input.close();
fos.close();
...