Загрузите файл apk с S3 с помощью DownloadManager
Есть ли способ загрузить файл из ведра S3 с помощью Android DownloadManager?
В настоящее время я могу загрузить файл apk из Dropbox, делая это:
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.addRequestHeader("Content-Type", "application/vnd.android.package-archive");
request.setMimeType("application/vnd.android.package-archive");
final DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
final long id = manager.enqueue(request);
Теперь то, что я хочу сделать, это заменить "url" на мой URL-адрес Amazon. Когда я это делаю, загрузка просто остается на 0% и просто застревает там.
Есть ли способ сделать это?
Кстати, URL-адрес Amazon, который я передаю, содержит параметры AWSAccessKeyId
, Expires
и Signature
. URL-адрес выглядит следующим образом:
https://bucket-name.s3-us-west-2.amazonaws.com/uploads/app/apk/22/app.apk?AWSAccessKeyId=""&Expires=""&Signature=""
Ответы
Ответ 1
Причина, по которой это не удается, заключается в том, что вы устанавливаете заголовок Content-Type
. Этот заголовок не нужен для загрузки HTTP. Однако, как только он установлен, он должен быть частью сигнатуры в назначенном URL-адресе, как того требует AWS S3. Или вы увидите ошибку 403 Forbidden - SignatureDoesNotMatch
.
Быстрое решение - удалить заголовок Content-Type
.
request.addRequestHeader("Content-Type", "application/vnd.android.package-archive");
Другим решением является создание назначенного URL с заголовками, которые вам нужны. Скажем, вы действительно хотите установить тип контента, вы можете добавить его в GeneratePresignedUrlRequest, а затем создать URL-адрес из него.
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, key);
request.setContentType("application/vnd.android.package-archive");
URL url = s3Client.generatePresignedUrl(request);
Подробнее см. AmazonS3.generatePresignedUrl(GeneratePresignedUrlRequest).
Ответ 2
Здравствуйте, вы можете использовать следующий заголовок, чтобы получить файл apk в запросе.
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:819457
Content-Type:application/octet-stream