[英]AWS Android SDK not able to access s3 in “sub-directory”
我正在使用AWS API Gateway生成的android sdk來獲取s3(API網關后面的lambda)中對象的預簽名URL。
我的s3存儲桶如下所示:
* module_a
|\
| * file_a
| * subdir_a
| \
| * file_sa
* module_b
這對於file_a完美適用,但對於file_sa則無效。 至少當我使用android SDK時沒有,我得到一個URL,其中斜杠被%25252F
替換。 但是,當我在控制台中測試api時,會獲得正確的URL。
我可以使用SDK來解決此問題嗎?
更新
這是涉及此問題的代碼片段鏈。
Android代碼下載文件(例外發生在最后一行)
fileName = "css/style.css"; // file in s3
moduleName = "main"; // folder in s3
[...]
ApiClientFactory factory = new ApiClientFactory().credentialsProvider(
aws.credentialsProvider);
apiClient = factory.build(myAPIClient.class);
apiClient.modulesModuleFileGet(fileName.replace("/", "%2F"), moduleName);
URL url = new URL(url_path.getUrl());
URLConnection connection = url.openConnection();
connection.connect();
InputStream in = new BufferedInputStream(connection.getInputStream());
API網關
上面使用的api端點配置了兩個路徑參數(模塊名和文件名)。 調用lambda的主體映射模板如下所示:
#set($inputRoot = $input.path('$'))
{
"module" : "$input.params('module')",
"file": "$input.params('file')"
}
LAMBDA
from __future__ import print_function
import json
import urllib
import boto3
s3 = boto3.client('s3')
def lambda_handler(event, context):
key = event['module'] + "/" + event['file'].replace("%2F", "/")
url = s3.generate_presigned_url(
"get_object",
Params={'Bucket':"mybucket",
'Key': key},
ExpiresIn=60)
return {"url": url}
我已經按照評論發表了意見。 但是我仍然以某種方式得到雙引號斜杠。 這是工作代碼
public Url modulesModuleFileGet(String fileName, String moduleName) {
try {
String fileNameEnc = URLEncoder.encode(fileName, "UTF-8");
Url ret = getApiClient().modulesModuleFileGet(fileNameEnc, moduleName);
return ret;
} catch (UnsupportedEncodingException e){
Log.e(TAG, "> modulesModuleFileGet(", e);
return null;
}
}
def lambda_handler(event, context):
key = event['module'] + "/" + urllib.unquote_plus(urllib.unquote_plus(event['file']))
url = s3.generate_presigned_url(
"get_object",
Params={'Bucket':"my",
'Key': key},
ExpiresIn=60)
return {"url": url}
我仍然歡迎有關如何改進此問題的進一步建議,但目前它正在起作用。 感謝您為我指出正確方向的意見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.