поэтому у меня есть изображения в моем S3. В android я загрузил новое изображение на тот же ключ в S3. В s3 изображение правильно обновилось. Но, когда я вытаскиваю это обновленное изображение из android, используя библиотеку Glide с URL-адресом изображения, я получаю последний файл изображения, а не обновленный. Я понятия не имею, какую настройку я должен изменить на S3, чтобы исправить это! Я надеюсь, что кто-то может помочь!не может получить обновленный объект в s3?
Вот как я получаю мои изображения с s3:
Glide.with(getBaseContext()).load("https://myBucketURL/" + username + "PROFILE_IMAGE").centerCrop().into(my_imageView);
Как я загружать изображения в s3:
private void uploadToS3(String imagePath)
{
try
{
observer = transferUtility.upload(
"myBucket", /* The bucket to upload to*/
username + "PROFILE_IMAGE", /* The key for the uploaded object*/
imageStringToFile(imagePath,profileImageFile) /* The file where the data to upload exists*/
);
observer.setTransferListener(new TransferListener()
{
@Override
public void onStateChanged(int id, TransferState state) {
// do something
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
int percentage = (int) (bytesCurrent/bytesTotal * 100);
//Display percentage transfered to user
}
@Override
public void onError(int id, Exception ex) {
// do something
Log.e(PROFILE_IMAGE,"error");
Log.d(PROFILE_IMAGE, ex.getMessage());
}
});
success = true;
Log.d(PROFILE_IMAGE,"upload success!");
} catch (IOException e)
{
e.printStackTrace();
Log.d(PROFILE_IMAGE,"upload failure");
Log.d(PROFILE_IMAGE,e.getMessage());
success = false;
}
}
private File imageStringToFile(String path, String fileName) throws IOException //returns you an image file FROM the image string
{
Bitmap bitmapImage = BitmapFactory.decodeFile(path);
//create a file to write bitmap data
File f = new File(activity.getBaseContext().getCacheDir(), fileName);
f.createNewFile();
//Convert bitmap to byte array
byte[] bitmapdata = ImageCompression.getInstant().getCompressedBitmap(path).toByteArray();
//write the bytes in file
FileOutputStream fos = new FileOutputStream(f);
fos.write(bitmapdata);
fos.flush();
fos.close();
return f;
}
Ура!
Ожидаете ли вы некоторое время, чтобы вернуть свое изображение? Пожалуйста, взгляните на этот вопрос: http://stackoverflow.com/questions/23786609/what-is-maximum-amazon-s3-replication-time-on-file-upload –
У вас есть CDN, например CloudFront перед ведро S3? –
Хмм, я вижу. поэтому для моего варианта использования, если пользователь меняет свое изображение профиля. То, что я пытаюсь сделать, это написать их текущую картину, но сохранить тот же ключ. И так как всякий раз, когда они возвращаются к экрану своего профиля, мне нужно перейти к этой ссылке s3, задержка будет очень плохой, потому что они увидели бы, что их изображение не изменилось (хотя в бэкэнде оно есть). Невозможно уменьшить эту задержку. Потому что даже сейчас, если я закрою приложение и снова открою его или подожду 10 минут, это будет старый образ профиля. – TheQ