с помощью ImageLoader загрузить изображения с URL-адреса AWS android

цель: Попытка показать изображения, которые хранятся в AWS. При вытягивании вверх/вниз в GridView отображаются 12 изображений. Я мог загрузить изображения, используя:

      try {
            InputStream in = new java.net.URL(url).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);

        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        bmImage.setImageBitmap(mIcon11);

Это означает, что URL-адрес работает. Однако вопрос в том, что когда я передаю URL-адрес загрузчику изображений, он показывает ошибку ниже: (я заменяю ключ и другие вещи в URL-адресе на «что-то».)

05-13 10:29:40.437  14053-14160/com.example.test E/ImageLoader﹕ https://s3.amazonaws.com/test/photo/1405.jpg?AWSAccessKeyId=something& something = something&Signature= something
java.io.FileNotFoundException: https://s3.amazonaws.com/test/photo/1405.jpg?AWSAccessKeyId=something& something = something&Signature= something
        at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:197)
        at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
        at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:25)
        at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromNetwork(BaseImageDownloader.java:122)
        at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:86)
        at com.nostra13.universalimageloader.core.decode.BaseImageDecoder.getImageStream(BaseImageDecoder.java:93)
        at com.nostra13.universalimageloader.core.decode.BaseImageDecoder.decode(BaseImageDecoder.java:73)
        at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.decodeImage(LoadAndDisplayImageTask.java:264)
        at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:237)
        at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:135)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)

Как я могу загрузить URL-адрес aws с помощью Image Loader? Или есть другой лучший способ показать 12 или более изображений из aws? Кто-нибудь знает? Большое спасибо!


person Amy    schedule 13.05.2015    source источник
comment
Вы не против использовать библиотеку для скачивания?   -  person Nik Myers    schedule 13.05.2015
comment
Эта ошибка выше вызвана тем, что файл не найден.   -  person inmyth    schedule 13.05.2015
comment
@NikMyers, у вас есть библиотека предложений?   -  person Amy    schedule 13.05.2015
comment
@inmyth да, так как я мог бы использовать тот же URL-адрес для загрузки изображения, используя InputStream in = new java.net.URL(url).openStream(); mIcon11 = BitmapFactory.decodeStream(in); Я действительно не знаю, где появляется ошибка   -  person Amy    schedule 13.05.2015
comment
Итак, вы уже скачали 10 изображений, и это работает?   -  person Nik Myers    schedule 13.05.2015
comment
@NikMyers 12 изображений. И изображения, которые не от AWS показывает.   -  person Amy    schedule 13.05.2015
comment
Установлены ли в AWS общедоступные изображения (и каталог, в котором они находятся)? Вы должны явно указать это либо при загрузке на него, либо через меню свойств.   -  person Cruceo    schedule 13.05.2015
comment
@Guardanis Большое спасибо за решение моей проблемы~!!   -  person Amy    schedule 13.05.2015


Ответы (1)


Чтобы загрузить изображения из корзины AWS S3, вам необходимо использовать клиент AmazonS3. Затем, используя awskey и секретный ключ aws, вы можете загрузить любое изображение, используя приведенный ниже код.

   Resources res = mContext.getResources();
            String awsKey = res.getString(R.string.aws_key);
            String awsSecretKey = res.getString(R.string.aws_secret_key);
            String awsBucketName = res.getString(R.string.aws_bucket_name);
            AmazonS3Client s3Client = new AmazonS3Client(
                    new BasicAWSCredentials(mContext.getResources().getString(R.string.aws_key),
                            mContext.getResources().getString(R.string.aws_secret_key)));

            S3ObjectInputStream content = s3Client.getObject(awsBucketName, url).getObjectContent();
person user3213851    schedule 26.06.2015
comment
По сути, нет необходимости использовать S3Client для загрузки изображений с AWS S3. Вы также можете сделать это с URL-адресами, подписанными AWS, если URL-адреса S3 отправляют правильные заголовки ответов. - person JaydeepW; 20.12.2016