我尝试过,如果我使用访问密钥,它工作正常,但我试图获取访问密钥并使用角色,但是一旦我获取访问密钥。我得到的回报是www.aws.amazon.com
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
const params = {Bucket: config.bucket, Expires: config.time, Key};
const url = s3.getSignedUrl('getObject', params);
console.log('The URL is', url);
Run Code Online (Sandbox Code Playgroud)
我什至通过进入我的 ec2 并运行 cli 命令来确保我的角色设置正确,aws s3 presign s3://bucket/path/file该命令工作正常,我得到了签名的 url 作为回报,所以这意味着我的角色是正确的,不是吗?
预先感谢您的任何建议/帮助。
我是单元测试的新手,我需要对对象存储类执行一些简单的单元测试。
我有一个名为 OSBucket 的类,如下所示:
def __initBucket(self):
ecs_session = boto3.Session(
aws_access_key_id="OSKEY",
aws_secret_access_key="SECRETKEY"
)
OS_resource = ecs_session.resource('s3', verify=cert, endpoint_url=endpoint)
self.mybucket = OS_resource.Bucket(OS_BUCKET)
def get_mybucket(self):
return self.mybucket
def download_file(self, fileName,filepath):
self.mybucket.download_file(fileName, filepath)
def upload_file(self, filepath,dest_file_name):
self.mybucket.upload_file(filepath, '%s%s' % ("/",dest_file_name))
Run Code Online (Sandbox Code Playgroud)
在类的构造函数中调用方法 __initBucket。
我如何开始创建一个单元测试类来测试,例如 download_file 方法?
更新1
moto_fake.start()
conn = boto3.resource('s3', aws_access_key_id="fake_id",
aws_secret_access_key="fake_secret")
conn.create_bucket(Bucket="OS_BUCKET")
os_bucket = OSBucket.OSBucket(thisRun)
sourcefile = "testingMoto.txt"
filePath = os.path.join("/", sourcefile)
os_bucket.upload_file(filePath, sourcefile)
Run Code Online (Sandbox Code Playgroud)
moto_fake.start()在创建对象之前执行的操作os_bucket对我不起作用。
更新2
使用 patch.object 将端点变量更改为 None,使测试通过
我设置了一个Cloud Run使用Bucketon 的Cloud Storage。我在本地运行它Docker Container,使用文件传递凭据json,从 中创建和下载IAM & Admin,并且它可以工作。部署后,写入存储桶会引发错误:
{
500 unable to sign bytes: googleapi: Error 403: Permission 'iam.serviceAccounts.signBlob' denied on resource (or it may not exist).
Details:
[{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"domain": "iam.googleapis.com",
"metadata": {
"permission": "iam.serviceAccounts.signBlob"
},
"reason": "IAM_PERMISSION_DENIED"
}]
[]
}
Run Code Online (Sandbox Code Playgroud)
任何想法?
我已经看到了我们如何为新创建的存储桶项提供默认条件和默认操作.我也知道我们可以根据自定义日期字段创建自定义规则来构建路径.
但是,如何在日期字段和保存时设置项目路径.考虑一个例子.我们有一个桶项目模板说"新闻",其日期字段说"发布日期".我们有项目创建的设置,项目路径的创建日期如"/ News/2015/09/16/item1".现在,我们需要有一些逻辑,我们可以在更新"item1"的"发布日期"并且项目已保存时更改路径.
当项目的发布日期更新且项目被保存时,我们如何更新项目路径!我需要在OnItemSaved()方法中实现一些逻辑吗?
我需要开发一个批处理文件,它会将多个小文本文件(4KB - 100KB)发送到S3存储桶中的文件夹.受到来自http://tmont.com/blargh/2014/1/uploading-to-s3-in-bash的bash脚本的启发,我开发了下面列出的批处理脚本.此脚本使用以下依赖项:
openssl.exe(以及两个库libeay32.dll和ssleay32.dll)
curl.exe
grep.exe
效果很好; 但是,有时文件或多个文件不会上传,我会收到"HTTP/1.1 403 Forbidden/SignatureDoesNotMatch."这似乎是签名问题,可能是在创建签名时.这种行为似乎没有一种模式.为了测试,我使用8个文本文件进行上传.我可以多次运行它,导致每次都上传所有文件,下次脚本只会上传5,6或7个.我有点不知道为什么会发生这种情况.任何建议,将不胜感激.
@echo off
setlocal enableDelayedExpansion
for /f %%f in ('dir /b *.txt') do (
REM Set date/time variables
for /f "tokens=1-4 delims=/ " %%a in ('date /t') do set dow=%%a&&set day=%%c&& set month=%%b&&set year=%%d
for /f "tokens=1-4 delims=:,. " %%h in ('echo %time%') do set hour=%%h&set min=%%i&set sec1=%%j&set sec2=%%k
REM Obtain three letter month value for DateValue HTTP Header
IF !month! == 01 set mname=Jan
IF …Run Code Online (Sandbox Code Playgroud) 在java中,hashcode()方法返回整数而不是long.有什么具体原因吗?
尝试将新通知附加到存储桶。在互联网上找不到任何示例。
我需要将 ObjectCreated 事件发送到 SQS。我需要决定事件由前缀发送到哪个队列。因此,每个通知在同一个桶上会有不同的队列和前缀。
问题是我无法附加新通知。我只是覆盖了之前在存储桶中配置的通知。
这是我到目前为止的代码:
bucket_notifications_configuration = {
'QueueConfigurations': [{
'Events': ['s3:ObjectCreated:*'],
'Id': f"Notif_{queue_name}",
'QueueArn': queue.attributes['QueueArn'] ,
"Filter": {
"Key": {
"FilterRules": [
{
"Name": "suffix",
"Value": f"{prefix}"
}
]
}
}
}]
}
qpolicy = {
"Version": "2012-10-17",
"Id": f"{queue_arn}/SQSDefaultPolicy",
"Statement": [{
"Sid": f"allow bucket {bucket} to notify queue {queue_name}",
"Effect": "Allow",
"Principal": {"AWS": "*"},
"Action": "SQS:SendMessage",
"Resource": queue_arn,
"Condition": {
"ArnLike": {
"aws:SourceArn": f"arn:aws:s3:*:*:{bucket}"
}
}
}]
}
queue_attrs = queue.attributes
queue_attrs = {"Policy": json.dumps(qpolicy), } …Run Code Online (Sandbox Code Playgroud) 如何从配置单元中的第n个存储桶中获取所有记录。
从存储桶9中选择* from bucketTable;
我正在尝试从我的 s3 照片桶制作照片库。我流程的下一步是配置 CORS,但是当我使用提供的代码时,出现错误。有人可以解释我做错了什么或如何将代码更改为有效的 JSON?
感谢您的帮助,不胜感激。对此非常陌生。
https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photos-view.html
跨域资源共享 (CORS) CORS 配置以 JSON 编写,为加载在一个域中的客户端 Web 应用程序与不同域中的资源进行交互定义了一种方式。了解更多 ??CORS 配置必须以有效的 JSON 编写。API 响应预期 params.CORSConfiguration.CORSRules 是一个数组
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud) bucket ×10
amazon-s3 ×5
python ×2
amazon-sqs ×1
apache-spark ×1
arrays ×1
batch-file ×1
bigdata ×1
c# ×1
gallery ×1
gridfs ×1
hashcode ×1
hive ×1
java ×1
mocking ×1
mongodb ×1
performance ×1
sitecore ×1
sitecore7 ×1
sitecore7.2 ×1
sitecore8 ×1
unit-testing ×1
upload ×1