如何使用Coldfusion在AmazonS3上创建EU存储桶?
我正在运行如何使用Coldfusion在AmazonS3上创建EU存储桶?,coldfusion,upload,amazon-s3,amazon-web-services,bucket,Coldfusion,Upload,Amazon S3,Amazon Web Services,Bucket,我正在运行Coldfusion8,并且正在尝试使用EU bucket设置它 我可以使用cfc在美国设置水桶,但每当我改变到欧盟设置时,它都不起作用 下面是正在使用的函数: <cffunction name="putBucket" access="public" output="false" returntype="boolean" description="Creates a bucket."> <cfargument name="bucketName" type="s
Coldfusion8
,并且正在尝试使用EU bucket设置它
我可以使用cfc在美国设置水桶,但每当我改变到欧盟设置时,它都不起作用
下面是正在使用的函数:
<cffunction name="putBucket" access="public" output="false" returntype="boolean" description="Creates a bucket.">
<cfargument name="bucketName" type="string" required="true">
<cfargument name="acl" type="string" required="false" default="public-read">
<cfargument name="storageLocation" type="string" required="false" default="">
<cfset var strXML = "">
<cfset var dateTimeString = GetHTTPTimeString(Now())>
<cfset var destination = "http://s3.amazonaws.com/">
<!--- Create a canonical string to send based on operation requested --->
<cfset var cs = "PUT\n\ntext/html\n#dateTimeString#\nx-amz-acl:#arguments.acl#\n/#arguments.bucketName#">
<cfset var signature = createSignature(cs)>
<!--- added switch to EU --->
<cfif arguments.storageLocation EQ "EU">
<cfset destination = "http://s3-eu-west-1.amazonaws.com/">
</cfif>
<!--- Create a proper signature --->
<cfif compare(arguments.storageLocation,'')>
<cfsavecontent variable="strXML">
<CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><LocationConstraint>#arguments.storageLocation#</LocationConstraint></CreateBucketConfiguration>
</cfsavecontent>
<cfelse>
<cfset strXML = "">
</cfif>
<!--- put the bucket via REST --->
<cfhttp method="PUT" url="#destination##arguments.bucketName#" charset="utf-8">
<cfhttpparam type="header" name="Content-Type" value="text/html">
<cfhttpparam type="header" name="Date" value="#dateTimeString#">
<cfhttpparam type="header" name="x-amz-acl" value="#arguments.acl#">
<cfhttpparam type="header" name="Authorization" value="AWS #variables.accessKeyId#:#signature#">
<cfhttpparam type="body" value="#trim(strXML)#">
</cfhttp>
<cfreturn true>
</cffunction>
将生成一个strXML,如下所示:
<CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><LocationConstraint>#arguments.storageLocation#</LocationConstraint></CreateBucketConfiguration>
#参数.存储位置#
这会再次创建
错误请求
错误如果您在Linux上运行此操作,您也可以使用S3CMD工具
sudo apt-get install s3cmd
然后,您将需要运行配置过程,或者更好,在源代码管理中构建和维护配置,并部署到执行S3命令的服务器
s3cmd --configure
通常,配置包括有关S3帐户的信息(特别是密钥)。确保如果您使用的是一个文件,那么您就正确地设置了该文件的权限,这样您就不必以root用户身份执行s3cmd
然后在你的申请中
<cfexecute name="s3cmd" arguments="mb s3://my-new-bucket-name">
您需要使用。根据API文档,我认为这些值是:
铲斗的首选地理位置。[允许值:AmazonS3::REGION_US_E1,AmazonS3::REGION_US_W1,AmazonS3::REGION_EU_W1,AmazonS3::REGION_APAC_SE1,AmazonS3::REGION_APAC_NE1]
谢谢你的信息。运行windows。我还没有上传文件,但读取需要是acl=public read。这就是你所说的“…如果你使用一个文件,你就正确地设置了文件的权限…”嗯。好的。然后我不明白:-)你说它不起作用,但实际发生了什么?您的
PUT
请求的返回值是多少?现在我正在将其发布到函数:bucketName=\u my\u bucket\u&acl=public read&storage=eu-west-1&createBucket=Create+bucket。当表单发布到自身时,页面被重新加载,新的bucket不会显示在页面列表中(AWS控制台上也不会显示)。在哪里可以找到put请求的返回值?在您发布的方法中的cfhttp
请求之后,添加
,然后查看来自Amazon的响应。这应该告诉你为什么亚马逊决定不创建你的bucket.Ah。400错误请求(InvalidLocationConstraint)您对该地区的看法是正确的,但我仍然无法让它工作。请参见上面的我的编辑您需要在#参数周围添加
。storageLocation#
,这就是为什么它只是在字符串中添加磅符号。我尝试过,但仍然不起作用。与此同时,我刚刚在AWS控制台上创建了一个EU存储桶。在我的s3.cfc测试页面上显示此消息时,尝试访问存储桶或上载任何图像会产生错误(如果它告诉您:搜索XML文档时发生错误。前缀必须在名称范围中解析)在s3.cfc:contents=xmlSearch(data,“/:contents”)中引用此行
<cfexecute name="s3cmd" arguments="mb s3://my-new-bucket-name">