如何将特定类型的所有文件上传到S3存储桶? [英] How to upload all files of a specific type to S3 Bucket?

查看:134
本文介绍了如何将特定类型的所有文件上传到S3存储桶?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我这样做时:

foreach ($f in (Get-ChildItem -filter "*.flv")){
    Write-S3Object -BucketName bucket.example -File $f.fullName -Key $f.name -CannedACLName PublicRead
}

我收到此错误:

Write-S3Object :
At line:1 char:51
+  foreach ($f in (Get-ChildItem -filter "*.flv")){ Write-S3Object -BucketName xx. ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Amazon.PowerShe...eS3ObjectCmdlet:WriteS3ObjectCmdlet) [Write-S3Objec
   t], InvalidOperationException
    + FullyQualifiedErrorId : Amazon.S3.AmazonS3Exception,Amazon.PowerShell.Cmdlets.S3.WriteS3ObjectCmdlet

我做错了什么?我有什么办法可以看到更多错误,还是仅仅是语法问题?

What am I doing wrong? Is there anything I can do to see more of the error, or is this just a syntax issue?

如何使用Powershell将所有特定文件类型上载到存储桶?

How can I otherwise upload all of a certain filetype to a bucket using powershell?

我故意将Set-DefaultAWSRegion设置到了存储桶所不在的区域,并得到

I intentionally set Set-DefaultAWSRegion to a region that the bucket wasn't in, and got

Write-S3Object : The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint. 

作为错误消息,正如预期的那样,因此看起来它可以连接到存储桶,并且知道它不在特定区域中.

as an error message, as expected, so it looks like it can connect to the bucket and it knows that it isn't in a certain region.

此外,如果我在存储桶名称之前输入s3://前缀,则会收到一条消息,提示找不到存储桶,因此看来我现在输入的内容是正确的.

Also, if I enter the s3:// prefix before the bucket name, I get a message that the bucket couldn't be found, so it it looks like what I'm entering now is correct.

我可以执行Get-S3Bucket并查看帐户中的所有存储桶,因此我知道它的配置正确.

I can do Get-S3Bucket and see all of the buckets on my account, so I know that it's configured correctly.

如果我这样做:

> $f = Get-ChildItem -filter "*.flv"
> Write-S3Object

cmdlet Write-S3Object at command pipeline position 1
Supply values for the following parameters:
BucketName: bucket.name
Key: $f[0].name
File: $f[0].fullName
Write-S3Object : The file indicated by the FilePath property does not exist!
At line:1 char:1
+ Write-S3Object
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Amazon.PowerShe...eS3ObjectCmdlet:WriteS3ObjectCmdlet) [Write-S3Objec
   t], InvalidOperationException
    + FullyQualifiedErrorId : System.ArgumentException,Amazon.PowerShell.Cmdlets.S3.WriteS3ObjectCmdlet

如果单独执行$f[0].fullName,则将获得对象的完整路径. 但是,其中有空格.这可能是个问题吗?

If I do $f[0].fullName seperately, I get the full path to the object. However, this has spaces in it. Could this be a problem?

推荐答案

当您在命令行中填写缺少的参数时,需要指定其文字字符串值.当我在本地模仿您的问题时:

When you fill in missing parameters like that from the command line, you need to specify their literal string values. When I mimicked your issue locally:

PS C:\> Write-S3Object

cmdlet Write-S3Object at command pipeline position 1
Supply values for the following parameters:
BucketName: MyTestBucketNameHere
Key: $testName
File: C:/test.txt

我最终在S3上找到了一个文件,该文件的键名为$testName,因为在这种情况下不对变量求值.同样,您收到此"FilePath属性指示的文件不存在!" 错误,因为文件系统中没有名为$f[0].fullName的文件.

I ended up with a file on S3 whose key was named $testName, because variables aren't evaluated in that context. Likewise, you're getting this "The file indicated by the FilePath property does not exist!" error because there is no file in your filesystem named $f[0].fullName.

将单个文件写入S3的示例:

An example to write a single file to S3:

PS C:> Write-S3Object -BucketName "MyTestBucketName" -Key "file.txt" -File "C:/test.txt"

要将所有文件写入S3:

To write all of your files to S3:

PS C:\> (Get-ChildItem -filter "*.flv") | % { Write-S3Object -BucketName "MyTestBucketName" -File $_ -Key $_.name}

这将首先获取当前目录中所有flv文件类型的文件,对于每个对象(用百分号表示),我们将文件(用$_表示)写入MyTestBucketName的键为正在迭代的当前文件的名称属性.

This will first get all files with the flv file-type in your current directory, and for each object (represented by the percent sign) we will write the file (represented by $_) to MyTestBucketName with a Key that is the name property of the current file being iterated.

这篇关于如何将特定类型的所有文件上传到S3存储桶?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆