วิธีที่รวดเร็วในการแสดงรายการไฟล์ทั้งหมดในที่เก็บ Amazon S3?


151

ฉันมีกลุ่มฝาก amazon s3 ที่มีชื่อไฟล์นับหมื่นรายการ วิธีที่ง่ายที่สุดในการรับไฟล์ข้อความที่แสดงชื่อไฟล์ทั้งหมดในที่เก็บข้อมูลคืออะไร


ดังที่ถูกกล่าวถึงโดยความเห็นของ jldupont เกี่ยวกับคำตอบที่ได้รับจาก vdaubry boto.s3.bucketlistresultset.BucketListResultSetกล่าวถึงเงื่อนไข "ชื่อไฟล์นับหมื่น" ที่กล่าวถึงในคำถาม
chb

1
โปรดทราบว่าสำหรับถังที่มีวัตถุจำนวนมากพูดเป็นล้านหรือพันล้านวิธีการเข้ารหัส / การเขียนสคริปต์ด้านล่างจะใช้งานไม่ได้ คุณควรเปิดใช้งาน S3 Inventory และเรียกดูรายงานสินค้าคงคลังแทน
jarmod

คำตอบ:


120

ผมขอแนะนำให้ใช้Boto จากนั้นก็เป็นงูหลามสองแถวอย่างรวดเร็ว:

from boto.s3.connection import S3Connection

conn = S3Connection('access-key','secret-access-key')
bucket = conn.get_bucket('bucket')
for key in bucket.list():
    print key.name.encode('utf-8')

บันทึกสิ่งนี้เป็น list.py เปิดเทอร์มินัลแล้วเรียกใช้:

$ python list.py > results.txt

3
หากคุณได้รับ: boto.exception.S3ResponseError: S3ResponseError: 403 ต้องห้ามตรวจสอบให้แน่ใจว่านโยบายผู้ใช้สำหรับคีย์การเข้าถึง / ความลับมีการเข้าถึง S3
topherjaynes

1
ฉันได้รับข้อผิดพลาด 403 และฉันต้องทำตามคำแนะนำนี้เพื่อให้มันทำงานได้: stackoverflow.com/a/22462419/1143558
Ljubisa Livac

คุณวนซ้ำใน bash ได้อย่างไร
SuperUberDuper

4
คุณสามารถเพิ่มชุดตัวเลือกนี้โดยใช้แพ็คเกจ boto3 ใหม่ได้หรือไม่
yeliabsalohcin

@yeliabsalohcin เห็นคำตอบของฉัน
Casey

62

AWS CLI

เอกสารประกอบสำหรับaws s3 ls

AWS เพิ่งเปิดตัวเครื่องมือบรรทัดคำสั่งของพวกเขา มันใช้งานได้เหมือน boto และสามารถติดตั้งโดยใช้sudo easy_install awscliหรือsudo pip install awscli

เมื่อคุณติดตั้งแล้วคุณสามารถเรียกใช้

aws s3 ls

ซึ่งจะแสดงให้คุณเห็นถังทั้งหมดที่มีอยู่

CreationTime Bucket
       ------------ ------
2013-07-11 17:08:50 mybucket
2013-07-24 14:55:44 mybucket2

จากนั้นคุณสามารถสอบถามที่ฝากข้อมูลเฉพาะสำหรับไฟล์

คำสั่ง :

aws s3 ls s3://mybucket

ผลผลิต :

Bucket: mybucket
Prefix:

      LastWriteTime     Length Name
      -------------     ------ ----
                           PRE somePrefix/
2013-07-25 17:06:27         88 test.txt

นี่จะแสดงไฟล์ทั้งหมดของคุณ


14
เพิ่มการ--recursiveตั้งค่าสถานะเพื่อดูวัตถุทั้งหมดภายใต้ไดเรกทอรีที่ระบุ
Chris Bloom

2
มีวิธีการแยกชื่อออกหรือไม่? ฉันต้องการสร้างรายชื่อไฟล์ในที่ฝากข้อมูล s3 เพื่อระบุ
Casey

นอกจากนี้ s3 เข้ารหัสชื่อไฟล์ที่จะใช้เป็น URL ไฟล์เหล่านี้เป็นชื่อไฟล์ดิบ ..
Casey

42

s3cmdมีค่าสำหรับสิ่งนี้

$ s3cmd ls -r s3://yourbucket/ | awk '{print $4}' > objects_in_bucket


1
s3cmdส่งคืนชื่อไฟล์เรียงตามวันที่ มีวิธีใด ๆ ที่ฉันสามารถทำให้มันกลับพูดเฉพาะแฟ้มที่ได้รับการเพิ่มเข้ามาหลังจาก2015-10-23 20:46?
SexyBeast

โปรดทราบว่าถ้าชื่อไฟล์มีช่องว่างนี่จะมีข้อผิดพลาดเล็ก ๆ แต่ฉันไม่มี awk-foo ที่จะแก้ไขมัน
Colin D

36

ระวังรายการอเมซอนจะส่งคืนไฟล์เพียง 1,000 ไฟล์เท่านั้น หากคุณต้องการวนซ้ำทุกไฟล์คุณต้องแบ่งหน้าผลลัพธ์โดยใช้เครื่องหมาย:

ในทับทิมโดยใช้aws-s3

bucket_name = 'yourBucket'
marker = ""

AWS::S3::Base.establish_connection!(
  :access_key_id => 'your_access_key_id',
  :secret_access_key => 'your_secret_access_key'
)

loop do
  objects = Bucket.objects(bucket_name, :marker=>marker, :max_keys=>1000)
  break if objects.size == 0
  marker = objects.last.key

  objects.each do |obj|
      puts "#{obj.key}"
  end
end

ปลาย

หวังว่านี่จะช่วยได้


7
boto จัดการการเพจดูgithub.com/boto/boto/blob/develop/boto/s3/bucket.py
jldupont

ขอบคุณสำหรับสิ่งนี้ฉันมีช่วงเวลาที่ยากลำบากในการหาวิธีกำหนดเครื่องหมาย: 1:
Adrian Magdas

20

อัปเดต 15-02-2019:

คำสั่งนี้จะให้รายการถังทั้งหมดใน AWS S3:

aws s3 ls

คำสั่งนี้จะให้รายการของวัตถุระดับบนสุดทั้งหมดในที่เก็บ AWS S3:

aws s3 ls bucket-name

คำสั่งนี้จะให้รายการของวัตถุทั้งหมดในที่เก็บ AWS S3:

aws s3 ls bucket-name --recursive

คำสั่งนี้จะวางรายการทั้งหมดไว้ในที่เก็บ AWS S3 ... ภายในไฟล์ข้อความในไดเรกทอรีปัจจุบันของคุณ:

aws s3 ls bucket-name --recursive | cat >> file-name.txt


ใช้งานได้ แต่ไม่ใช่สิ่งที่ฉันต้องการจริงๆ เพียงแสดงคำนำหน้า "ระดับบนสุด" ทั้งหมด มีวิธีการรับวัตถุทั้งหมดในฝากข้อมูลคำนำหน้าและทั้งหมดหรือไม่
rinogo

อัปเดต: คำตอบโดย @sysuserคือสิ่งที่ฉันต้องการ
rinogo

@rinogo มันไม่ตรงกับความต้องการของคุณ ... แต่มันใช้งานได้และนั่นคือสิ่งที่นับได้ที่นี่ เหมาะกับความต้องการอื่น ๆ ของ ppl เป็นคำตอบที่ถูกต้อง
Khalil Gharbaoui

อย่างที่ฉันพูดมันใช้งานได้ - ขอบคุณ! แต่มันไม่ตอบคำถามของ OP OP ขอวิธีในการ "[รายการ] ชื่อไฟล์ทั้งหมดในถัง" นี่แสดงรายการวัตถุระดับบนสุดเท่านั้นไม่ใช่วัตถุทั้งหมด
rinogo

2
อ้า แต่นั่นไม่ยากที่จะทำ เพียงเพิ่ม '--recursive' ลงในคำสั่ง ฉันจะเพิ่มขอบคุณสำหรับคำตอบของฉันชี้ให้เห็นว่า
คาลิล Gharbaoui

12

สำหรับนักพัฒนา Scala นี่คือฟังก์ชั่นวนซ้ำเพื่อเรียกใช้การสแกนแบบเต็มและแมปเนื้อหาของที่เก็บ AmazonS3 โดยใช้AWS SDK สำหรับ Javaอย่างเป็นทางการ

import com.amazonaws.services.s3.AmazonS3Client
import com.amazonaws.services.s3.model.{S3ObjectSummary, ObjectListing, GetObjectRequest}
import scala.collection.JavaConversions.{collectionAsScalaIterable => asScala}

def map[T](s3: AmazonS3Client, bucket: String, prefix: String)(f: (S3ObjectSummary) => T) = {

  def scan(acc:List[T], listing:ObjectListing): List[T] = {
    val summaries = asScala[S3ObjectSummary](listing.getObjectSummaries())
    val mapped = (for (summary <- summaries) yield f(summary)).toList

    if (!listing.isTruncated) mapped.toList
    else scan(acc ::: mapped, s3.listNextBatchOfObjects(listing))
  }

  scan(List(), s3.listObjects(bucket, prefix))
}

ในการเรียกใช้map()ฟังก์ชั่นcurried ข้างต้นเพียงแค่ผ่านวัตถุ AmazonS3Client ที่สร้างไว้แล้วและเริ่มต้นอย่างถูกต้องแล้ว (อ้างถึงAWS SDKอย่างเป็นทางการสำหรับการอ้างอิง Java API ) ชื่อที่ฝากข้อมูลและชื่อคำนำหน้าในรายการพารามิเตอร์แรก ผ่านฟังก์ชั่นที่f()คุณต้องการนำไปใช้จับคู่แต่ละวัตถุสรุปในรายการพารามิเตอร์ที่สอง

ตัวอย่างเช่น

val keyOwnerTuples = map(s3, bucket, prefix)(s => (s.getKey, s.getOwner))

จะส่งคืนรายการ(key, owner)tuples ทั้งหมดในที่ฝากข้อมูล / คำนำหน้า

หรือ

map(s3, "bucket", "prefix")(s => println(s))

ตามปกติคุณจะเข้าหาMonads ใน Function Programming


มีข้อผิดพลาดกับรหัสนี้ หากการสแกนเริ่มต้นถูกตัดทอนการคืนครั้งสุดท้ายจะกลับมาmapped.toListโดยไม่มีสิ่งใดก่อนหน้านี้acc
Mark Wang

ขอบคุณ - โปรดทราบว่าตอนนี้ AmazonS3Client ควรเป็นเพียง AmazonS3
Anthony Holland เมื่อ

11

มีสองวิธีที่คุณสามารถไปได้ ใช้ Python

import boto3

sesssion = boto3.Session(aws_access_key_id, aws_secret_access_key)

s3 = sesssion.resource('s3')

bucketName = 'testbucket133'
bucket = s3.Bucket(bucketName)

for obj in bucket.objects.all():
    print(obj.key)

อีกวิธีหนึ่งคือการใช้ AWS cli สำหรับมัน

aws s3 ls s3://{bucketname}
example : aws s3 ls s3://testbucket133

หาก aws ได้รับการกำหนดค่าแล้วเราสามารถแทนที่ 2 และ 3 ด้วยs3 = boto3.resource('s3')
sinapan

หากคุณมีตัวแปรสภาพแวดล้อมอยู่คุณไม่จำเป็นต้องใช้ตัวแปรในsessionวิธีการ AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID'] AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
Flavio

7

หลังจากแซคฉันขอแนะนำbotoด้วย แต่ฉันต้องการสร้างความแตกต่างเล็กน้อยให้กับโค้ดของเขา:

conn = boto.connect_s3('access-key', 'secret'key')
bucket = conn.lookup('bucket-name')
for key in bucket:
    print key.name

3
การแก้ไขจำเป็นเนื่องจากรหัสต้นฉบับไม่ทำงานในเวลาเดียวกัน
Datageek

1
conn.lookupส่งคืนNoneแทนที่จะส่งS3ResponseError(NoSuchBucket)ข้อผิดพลาด
Ehtesh Choudhury


5

สำหรับ Python boto3 หลังจากใช้แล้วaws configure:

import boto3
s3 = boto3.resource('s3')

bucket = s3.Bucket('name')
for obj in bucket.objects.all():
    print(obj.key)

5

ก่อนให้แน่ใจว่าคุณอยู่บนinstance terminalและคุณมีall accessของS3ในIAMคุณกำลังใช้ ตัวอย่างเช่นฉันใช้อินสแตนซ์ ec2

pip3 install awscli

จากนั้นกำหนดค่า aws

aws configure

จากนั้นเติม excredantials เช่น: -

$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json (or just press enter)

ตอนนี้ดูที่เก็บข้อมูลทั้งหมด

aws s3 ls

เก็บชื่อถังทั้งหมด

aws s3 ls > output.txt

ดูโครงสร้างไฟล์ทั้งหมดในที่เก็บข้อมูล

aws s3 ls bucket-name --recursive

จัดเก็บโครงสร้างไฟล์ในที่เก็บข้อมูลแต่ละชุด

aws s3 ls bucket-name --recursive > file_Structure.txt

หวังว่านี่จะช่วยได้


ใช้งานได้ ... แต่ใช้เวลาสำหรับ e-ver เพื่อให้ได้ถังทั้งหมด
gvasquez

4

AWS CLI สามารถให้คุณดูไฟล์ทั้งหมดของที่ฝากข้อมูล S3 ได้อย่างรวดเร็วและช่วยในการดำเนินการอื่น ๆ ด้วย

วิธีใช้ AWS CLI ทำตามขั้นตอนด้านล่าง:

  1. ติดตั้ง AWS CLI
  2. กำหนดค่า AWS CLI สำหรับการใช้ข้อมูลรับรองความปลอดภัยเริ่มต้นและภูมิภาค AWS เริ่มต้น
  3. หากต้องการดูไฟล์ทั้งหมดของคำสั่ง S3 bucket ให้ใช้

    aws s3 ls s3: // your_bucket_name --recursive

การอ้างอิงเพื่อใช้ AWS cli สำหรับบริการ AWS ต่างๆ: https://docs.aws.amazon.com/cli/latest/reference/


3

ใน Java คุณสามารถรับกุญแจได้โดยใช้ ListObjects (ดูเอกสาร AWS )

FileWriter fileWriter;
BufferedWriter bufferedWriter;
// [...]

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());        

ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName(bucketName)
.withPrefix("myprefix");
ObjectListing objectListing;

do {
    objectListing = s3client.listObjects(listObjectsRequest);
    for (S3ObjectSummary objectSummary : 
        objectListing.getObjectSummaries()) {
        // write to file with e.g. a bufferedWriter
        bufferedWriter.write(objectSummary.getKey());
    }
    listObjectsRequest.setMarker(objectListing.getNextMarker());
} while (objectListing.isTruncated());

มีอีกหนึ่ง API ที่ใช้ได้ง่ายซึ่งจะใช้ชื่อที่ฝากข้อมูลและแสดงรายการวัตถุที่อยู่ในนั้น ObjectListing objects = s3client.listObjects (bucketName) ลิงก์ javadoc แสดงไว้ด้านล่าง, docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/ …
Rajesh

2

โค้ดในไพ ธ อนใช้lib "boto" ที่ยอดเยี่ยม รหัสส่งคืนรายการไฟล์ในที่เก็บข้อมูลและจัดการข้อยกเว้นสำหรับถังที่หายไป

import boto

conn = boto.connect_s3( <ACCESS_KEY>, <SECRET_KEY> )
try:
    bucket = conn.get_bucket( <BUCKET_NAME>, validate = True )
except boto.exception.S3ResponseError, e:
    do_something() # The bucket does not exist, choose how to deal with it or raise the exception

return [ key.name.encode( "utf-8" ) for key in bucket.list() ]

อย่าลืมแทนที่ <PLACE_HOLDERS> ด้วยค่าของคุณ


2

คำสั่งด้านล่างจะได้รับชื่อไฟล์ทั้งหมดจากที่เก็บ AWS S3 ของคุณและเขียนเป็นไฟล์ข้อความในไดเรกทอรีปัจจุบันของคุณ:

aws s3 ls s3://Bucketdirectory/Subdirectory/ | cat >> FileNames.txt

1

หรือคุณสามารถใช้ Minio Client aka mc โอเพ่นซอร์สและเข้ากันได้กับ AWS S3 มันสามารถใช้ได้สำหรับLinux, Windows, Mac, FreeBSD

สิ่งที่คุณต้องทำคือเรียกใช้คำสั่งmc lsเพื่อแสดงรายการเนื้อหา

$ mc ls s3 / kline /
[2016-04-30 13:20:47 IST] 1.1MiB 1.jpg
[2016-04-30 16:03:55 IST] 7.5KiB docker.png
[2016-04-30 15:16:17 IST] 50KiB pi.png
[2016-05-10 14:34:39 IST] 365KiB upton.pdf

บันทึก:

  • s3: Alias ​​สำหรับ Amazon S3
  • kline: ชื่อถัง AWS S3

การติดตั้ง Minio Client Linux Download mc สำหรับ:

$ chmod 755 mc
$ ./mc - ช่วย

การตั้งค่าข้อมูลรับรอง AWS ด้วยไคลเอนต์ Minio

$ mc config host เพิ่ม mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12

หมายเหตุ: โปรดแทนที่ mys3 ด้วยนามแฝงที่คุณต้องการสำหรับบัญชีนี้และ BKIKJAA5BMMU2RHO6IBB, V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 ของคุณด้วย AWS ACCESS-KEY และ SECRET-KEY

หวังว่ามันจะช่วย

คำเตือน: ฉันทำงานให้Minio


กรุณาหลีกเลี่ยงการแบ่งปันรหัสลับ IAM ได้ทุกที่
Alexey Vazhnov


1

คุณสามารถแสดงรายการไฟล์ทั้งหมดในที่เก็บ aws s3 โดยใช้คำสั่ง

aws s3 ls path/to/file

และเพื่อบันทึกลงในไฟล์ให้ใช้

aws s3 ls path/to/file >> save_result.txt

หากคุณต้องการผนวกผลลัพธ์ของคุณเป็นไฟล์อื่น:

aws s3 ls path/to/file > save_result.txt

ถ้าคุณต้องการที่จะล้างสิ่งที่เขียนก่อน

มันจะทำงานได้ทั้งใน windows และ Linux


1

ในจาวาสคริปต์คุณสามารถใช้

s3.listObjects (params, function (err, result) {});

เพื่อรับวัตถุทั้งหมดในที่เก็บข้อมูล คุณจะต้องส่งชื่อถังภายในparams (Bucket: ชื่อ)


1
function showUploads(){
    if (!class_exists('S3')) require_once 'S3.php';
    // AWS access info
    if (!defined('awsAccessKey')) define('awsAccessKey', '234567665464tg');
    if (!defined('awsSecretKey')) define('awsSecretKey', 'dfshgfhfghdgfhrt463457');
    $bucketName = 'my_bucket1234';
    $s3 = new S3(awsAccessKey, awsSecretKey);
    $contents = $s3->getBucket($bucketName);
    echo "<hr/>List of Files in bucket : {$bucketName} <hr/>";
    $n = 1;
    foreach ($contents as $p => $v):
        echo $p."<br/>";
        $n++;
    endforeach;
}

1
คุณใช้คลาส S3 รุ่นใด หาได้ที่ไหน
iDev247

0
# find like file listing for s3 files
aws s3api --profile <<profile-name>> \
--endpoint-url=<<end-point-url>> list-objects \
--bucket <<bucket-name>> --query 'Contents[].{Key: Key}'

3
ขอขอบคุณสำหรับข้อมูลโค้ดนี้ซึ่งอาจให้ความช่วยเหลือแบบ จำกัด และทันที คำอธิบายที่เหมาะสมจะช่วยปรับปรุงมูลค่าในระยะยาวอย่างมากโดยการแสดงว่าเหตุใดจึงเป็นวิธีแก้ปัญหาที่ดีและจะทำให้มีประโยชน์มากขึ้นสำหรับผู้อ่านในอนาคตด้วยคำถามอื่น ๆ ที่คล้ายกัน โปรดแก้ไขคำตอบของคุณเพื่อเพิ่มคำอธิบายรวมถึงข้อสมมติที่คุณได้ทำไว้
Toby Speight

0

คำตอบ Scala รุ่นประยุกต์และปรับปรุงโดย Paolo:

import scala.collection.JavaConversions.{collectionAsScalaIterable => asScala}
import com.amazonaws.services.s3.AmazonS3
import com.amazonaws.services.s3.model.{ListObjectsRequest, ObjectListing, S3ObjectSummary}

def buildListing(s3: AmazonS3, request: ListObjectsRequest): List[S3ObjectSummary] = {
  def buildList(listIn: List[S3ObjectSummary], bucketList:ObjectListing): List[S3ObjectSummary] = {
    val latestList: List[S3ObjectSummary] = bucketList.getObjectSummaries.toList

    if (!bucketList.isTruncated) listIn ::: latestList
    else buildList(listIn ::: latestList, s3.listNextBatchOfObjects(bucketList))
  }

  buildList(List(), s3.listObjects(request))
}

ลอกข้อมูลทั่วไปและใช้ ListObjectRequest ที่สร้างโดยผู้สร้าง SDK


0
public static Dictionary<string, DateTime> ListBucketsByCreationDate(string AccessKey, string SecretKey)  
{  

    return AWSClientFactory.CreateAmazonS3Client(AccessKey,
        SecretKey).ListBuckets().Buckets.ToDictionary(s3Bucket => s3Bucket.BucketName,
        s3Bucket => DateTime.Parse(s3Bucket.CreationDate));

}

2
ฉันเดาว่านี่คือต้นแบบ Java หรือบางอย่าง แต่โปรดอธิบาย
Doncho Gunchev

0

ใน PHP คุณสามารถรับรายการวัตถุ AWS-S3 ทั้งหมดในที่เก็บข้อมูลเฉพาะโดยใช้การโทรต่อไปนี้

$S3 = \Aws\S3\S3Client::factory(array('region' => $region,));
$iterator = $S3->getIterator('ListObjects', array('Bucket' => $bucket));
foreach ($iterator as $obj) {
    echo $obj['Key'];
}

คุณสามารถเปลี่ยนเส้นทางการส่งออกของรหัสด้านบนในไฟล์เพื่อรับรายการของคีย์


0

ใช้ plumbum เพื่อตัด cli และคุณจะมีไวยากรณ์ที่ชัดเจน:

import plumbum as pb
folders = pb.local['aws']('s3', 'ls')

0

โปรดลองสคริปต์ทุบตีนี้ มันใช้คำสั่ง curl โดยไม่จำเป็นต้องพึ่งพาภายนอกใด ๆ

bucket=<bucket_name>
region=<region_name>
awsAccess=<access_key>
awsSecret=<secret_key>
awsRegion="${region}"
baseUrl="s3.${awsRegion}.amazonaws.com"

m_sed() {
  if which gsed > /dev/null 2>&1; then
    gsed "$@"
  else
    sed "$@"
  fi
}

awsStringSign4() {
  kSecret="AWS4$1"
  kDate=$(printf         '%s' "$2" | openssl dgst -sha256 -hex -mac HMAC -macopt "key:${kSecret}"     2>/dev/null | m_sed 's/^.* //')
  kRegion=$(printf       '%s' "$3" | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kDate}"    2>/dev/null | m_sed 's/^.* //')
  kService=$(printf      '%s' "$4" | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kRegion}"  2>/dev/null | m_sed 's/^.* //')
  kSigning=$(printf 'aws4_request' | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kService}" 2>/dev/null | m_sed 's/^.* //')
  signedString=$(printf  '%s' "$5" | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kSigning}" 2>/dev/null | m_sed 's/^.* //')
  printf '%s' "${signedString}"
}

if [ -z "${region}" ]; then
  region="${awsRegion}"
fi


# Initialize helper variables

authType='AWS4-HMAC-SHA256'
service="s3"
dateValueS=$(date -u +'%Y%m%d')
dateValueL=$(date -u +'%Y%m%dT%H%M%SZ')

# 0. Hash the file to be uploaded

# 1. Create canonical request

# NOTE: order significant in ${signedHeaders} and ${canonicalRequest}

signedHeaders='host;x-amz-content-sha256;x-amz-date'

canonicalRequest="\
GET
/

host:${bucket}.s3.amazonaws.com
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date:${dateValueL}

${signedHeaders}
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"

# Hash it

canonicalRequestHash=$(printf '%s' "${canonicalRequest}" | openssl dgst -sha256 -hex 2>/dev/null | m_sed 's/^.* //')

# 2. Create string to sign

stringToSign="\
${authType}
${dateValueL}
${dateValueS}/${region}/${service}/aws4_request
${canonicalRequestHash}"

# 3. Sign the string

signature=$(awsStringSign4 "${awsSecret}" "${dateValueS}" "${region}" "${service}" "${stringToSign}")

# Upload

curl -g -k "https://${baseUrl}/${bucket}" \
  -H "x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" \
  -H "x-amz-Date: ${dateValueL}" \
  -H "Authorization: ${authType} Credential=${awsAccess}/${dateValueS}/${region}/${service}/aws4_request,SignedHeaders=${signedHeaders},Signature=${signature}"

-2

วิธีที่ง่ายที่สุดในการรับไฟล์ข้อความที่ใช้งานได้ดีคือดาวน์โหลดเบราว์เซอร์ S3 http://s3browser.com/และใช้ตัวสร้าง URL ของเว็บเพื่อสร้างรายการเส้นทางการเชื่อมโยงที่สมบูรณ์ มันมีประโยชน์มากและเกี่ยวข้องกับการคลิกประมาณ 3

-Browse to Folder
-Select All
-Generate Urls

ขอให้คุณโชคดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.