Amazon S3 बाल्टी में सभी फाइलों को सूचीबद्ध करने का त्वरित तरीका?


151

मेरे पास एक अमेज़ॅन s3 बाल्टी है जिसमें दसियों हज़ार फ़ाइलनाम हैं। बाल्टी में सभी फ़ाइलनामों को सूचीबद्ध करने वाली पाठ फ़ाइल प्राप्त करने का सबसे आसान तरीका क्या है?


वडूबरी द्वारा दिए गए उत्तर पर जेल्डुपोंट की टिप्पणी के अनुसार, boto.s3.bucketlistresultset.BucketListResultSetप्रश्न में उल्लिखित "दसियों हज़ारों फ़ाइलनाम" स्थिति को संबोधित करता है।
chb

1
इस बात से अवगत रहें कि बहुत बड़ी संख्या में वस्तुओं के साथ बाल्टी के लिए, लाखों या अरबों कहें, नीचे कोडिंग / स्क्रिप्टिंग दृष्टिकोण अच्छी तरह से काम नहीं करेगा। आपको इसके बजाय S3 इन्वेंटरी को सक्षम करना चाहिए और एक इन्वेंट्री रिपोर्ट को पुनः प्राप्त करना चाहिए।
जरमोद

जवाबों:


120

मैं बोटो का उपयोग करने की सलाह दूंगा । फिर यह अजगर की पंक्तियों की एक त्वरित जोड़ी है :

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')

इसे लिस्टहोम के रूप में सहेजें, एक टर्मिनल खोलें, और फिर चलाएं:

$ python list.py > results.txt

3
यदि आपको मिलता है: boto.exception.S3ResponseError: S3ResponseError: 403 निषिद्ध सुनिश्चित करें कि Access / गुप्त कुंजी के लिए उपयोगकर्ता नीति S3 तक पहुँच है।
२।

1
मुझे 403 त्रुटि मिली, और मुझे इसे काम करने के लिए इस निर्देशों का पालन करना पड़ा: stackoverflow.com/a/22462419/1143558
Ljubisa Livac

कैसे आप इसके माध्यम से पाश में पाश?
SuperUberDuper

4
क्या आप नए boto3 पैकेज का उपयोग करके इस पर एक संस्करण जोड़ सकते हैं?
येलियाब्लासोइसिन

@yeliabsalohcin मेरा जवाब देखें
केसी

62

AWS सीएलआई

आर 3 ss के लिए प्रलेखन

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निर्दिष्ट निर्देशिका के तहत सभी वस्तुओं को देखने के लिए ध्वज जोड़ें
क्रिस ब्लूम

2
क्या नामों को पार्स करने का कोई तरीका है? मैं एक s3 बाल्टी में फ़ाइलों की एक सूची बनाने के लिए देख रहा हूँ।
केसी

इसके अलावा, s3 फाइलनाम को URL के रूप में उपयोग करने के लिए एन्कोड करता है, ये सिर्फ कच्चे फ़ाइलनाम हैं ..
Casey

42

s3cmd इस तरह की चीज के लिए अमूल्य है

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


1
s3cmdतिथि के अनुसार छांटे गए फ़ाइलनामों को लौटाता है। क्या कोई ऐसा तरीका है जिससे मैं यह कह सकूं कि केवल उन्हीं फाइलों को कहा जाए जिन्हें बाद में जोड़ा गया है 2015-10-23 20:46?
सेक्सीबिट

ध्यान दें कि अगर फ़ाइलनाम में रिक्त स्थान है, तो इसमें एक छोटी सी गड़बड़ है, लेकिन मेरे पास इसे ठीक करने के लिए aw-foo नहीं है
कॉलिन डी

36

केयरफुल बनें, अमेजन लिस्ट में केवल 1000 फाइलें हैं। यदि आप मार्करों का उपयोग करके परिणामों को पृष्ठांकित करने के लिए सभी फ़ाइलों पर पुनरावृति करना चाहते हैं:

रूबी में 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
बोटो
संभालना

इसके लिए धन्यवाद, मुझे एक मुश्किल समय मिला कि मार्कर कैसे सेट किया जाए: 1:
एड्रियन मैगडस

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


यह काम करता है लेकिन वास्तव में मुझे जो चाहिए वह नहीं है। यह सिर्फ "शीर्ष-स्तर" के सभी उपसर्गों को सूचीबद्ध करता है। क्या बाल्टी, उपसर्ग और सभी में सभी वस्तुओं को प्राप्त करने का एक तरीका है?
रिनोगो

अपडेट: @sysuser द्वारा उत्तर की मुझे आवश्यकता है।
रिनोगो

@rinogo यह आपकी आवश्यकताओं के अनुरूप नहीं है ... लेकिन यह काम करता है और यही यहाँ मायने रखता है। यह एक सही उत्तर के रूप में अन्य पीपीएल की आवश्यकता पर फिट बैठता है।
खलील घरौई

जैसा मैंने कहा, यह काम करता है - धन्यवाद! लेकिन यह ओपी के सवाल का जवाब नहीं देता है। ओपी ने "[सूची] बाल्टी में सभी फ़ाइलनामों" के लिए एक रास्ता पूछा। यह केवल शीर्ष-स्तरीय ऑब्जेक्ट्स को सूचीबद्ध करता है, सभी ऑब्जेक्ट्स को नहीं ।
रिनोगो

2
अहा लेकिन ऐसा करना मुश्किल नहीं है। बस कमांड में '--recursive' जोड़ें। मुझे लगता है कि उनका कहना है के लिए मेरा उत्तर धन्यवाद में शामिल कर देंगे
खलील Gharbaoui

12

स्काला डेवलपर्स के लिए, यहां एक पूर्ण स्कैन निष्पादित करने और जावा के लिए आधिकारिक AWS SDK का उपयोग करके AmazonS3 बाल्टी की सामग्री को मैप करने के लिए पुनरावर्ती कार्य है।

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()फ़ंक्शन को लागू करने के लिए , बस पहले से निर्मित (और ठीक से आरंभीकृत) AmazonS3Client ऑब्जेक्ट ( जावा एपीआई संदर्भ के लिए आधिकारिक AWS एसडीके का संदर्भ ), बाल्टी नाम और पहले पैरामीटर सूची में उपसर्ग नाम को पास करें। साथ ही फंक्शन पास करेंf() आप प्रत्येक ऑब्जेक्ट सारांश को दूसरे पैरामीटर सूची में मैप करने के लिए लागू करना चाहते हैं।

उदाहरण के लिए

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

(key, owner)उस बाल्टी / उपसर्ग में tuples की पूरी सूची लौटाएगा

या

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

जैसा कि आप सामान्य रूप से कार्यात्मक प्रोग्रामिंग में मोनाड्स से संपर्क करेंगे


इस कोड के साथ एक बग है। यदि प्रारंभिक स्कैन को काट दिया जाता है, तो अंतिम रिटर्न केवल mapped.toListपिछले के बिना वापस आ जाएगीacc
मार्क वांग

धन्यवाद - ध्यान दें कि AmazonS3Client अब सिर्फ AmazonS3 होना चाहिए।
एंथनी हॉलैंड

11

ऐसे कुछ तरीके हैं जिनसे आप इसके बारे में जान सकते हैं। अजगर का उपयोग करना

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 क्ली का उपयोग कर रहा है

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

यदि एडब्ल्यूएस पहले से ही कॉन्फ़िगर किया गया है, एक लाइनों 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']
फ्लावियो

7

जाच के बाद मैं भी बोटो की सिफारिश करूंगा , लेकिन मुझे उनके कोड में थोड़ा बदलाव करने की जरूरत है:

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

3
संशोधन आवश्यक था क्योंकि मूल कोड एक बार में काम नहीं करता था।
डेटागेक

1
conn.lookupNoneएक S3ResponseError(NoSuchBucket)त्रुटि को फेंकने के बजाय रिटर्न
एहतेश चौधरी


5

पायथन के बोटो 3 का उपयोग करने के बाद 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 configure

फिर आउटसीडेंटियल पूर्व भरें: -

$ 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

उम्मीद है की यह मदद करेगा।


काम करता है ... लेकिन पूरी बाल्टी पाने के लिए ई-वे-
वर्ट लेता है

4

AWS CLI से आप S3 बाल्टी की सभी फाइलों को जल्दी देख सकते हैं और अन्य कार्यों को भी करने में मदद कर सकते हैं।

AWS सीएलआई का उपयोग करने के लिए नीचे दिए गए चरणों का पालन करें:

  1. AWS CLI स्थापित करें
  2. डिफ़ॉल्ट सुरक्षा क्रेडेंशियल और डिफ़ॉल्ट AWS क्षेत्र का उपयोग करने के लिए AWS CLI कॉन्फ़िगर करें
  3. S3 बाल्टी उपयोग कमांड की सभी फाइलों को देखने के लिए

    aws s3 ss s3: // your_bucket_name --recursive

विभिन्न एडब्ल्यूएस सेवाओं के लिए एडब्ल्यूएस क्ली का उपयोग करने का संदर्भ: 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());

एक और सरल एपीआई उपलब्ध है, जो बाल्टी नाम लेता है और इसमें मौजूद वस्तुओं को सूचीबद्ध करता है। ObjectListing ऑब्जेक्ट्स = s3client.listObjects (बकेटनेम) javadoc लिंक नीचे दिया गया है, डॉक्स.वेसमेजन.com
राजेश

2

भयानक "बोटो" का उपयोग करके अजगर में कोड । कोड एक बाल्टी में फाइलों की एक सूची देता है और लापता बाल्टियों के अपवादों को भी संभालता है।

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

नीचे दिए गए आदेश को आपके एडब्ल्यूएस एस 3 बाल्टी से सभी फ़ाइल नाम मिलेंगे और अपनी वर्तमान निर्देशिका में पाठ फ़ाइल में लिखेंगे:

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

1

वैकल्पिक रूप से आप Minio Client aka mc का उपयोग कर सकते हैं। इसका ओपन सोर्स और AWS S3 के साथ संगत है। यह लिनक्स, विंडोज, मैक, फ्रीबीएसडी के लिए उपलब्ध है।

आपको बस इतना करना है कि सामग्री को सूचीबद्ध करने के लिए mc ls कमांड चलाना है ।

$ m 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: अमेज़न S3 के लिए उपनाम
  • kline: AWS S3 बाल्टी नाम

निम्न के लिए मिनिओ क्लाइंट लिनक्स डाउनलोड एमसी को स्थापित करना :

$ chmod 755 mc
$ ./mc --help

मिनियो क्लाइंट के साथ AWS क्रेडेंशियल सेट करना

$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSS525Q9GSrr12

नोट: कृपया mys3 को उस खाते से बदल दें, जिसे आप इस खाते के लिए चाहते हैं और BKIKJAA5BMMU2RHO6IBB, V7f1CwQqAcwo80UEIJEjc5gVQUSHx5ohQ9GSrr12 पर अपने AWS ACCESS-KEY और SECRET-KEY के साथ

आशा करता हूँ की ये काम करेगा।

डिस्क्लेमर: मैं मिनियो के लिए काम करता हूं


कृपया कहीं भी IAM गुप्त कुंजी साझा करने से बचें।
एलेक्सी वाज़नोव

1

आप मानक s3 एपीआई का उपयोग कर सकते हैं -

aws s3 ls s3://root/folder1/folder2/

1

आप कमांड का उपयोग करके a3 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

यदि आप स्पष्ट करना चाहते हैं कि पहले क्या लिखा गया था।

यह विंडोज़ और लिनक्स दोनों में काम करेगा।


1

जावास्क्रिप्ट में आप उपयोग कर सकते हैं

s3.listObjects (params, function (इरेट, परिणाम) {});

बाल्टी के अंदर सभी वस्तुओं को पाने के लिए। आपको पैरामेट्स के अंदर बकेट का नाम देना होगा (बकेट: नाम)


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 वर्ग का उपयोग कर रहे हैं? यह मुझे कहाँ मिल सकता है?
19

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
इस कोड स्निपेट के लिए धन्यवाद, जो कुछ सीमित, तत्काल सहायता प्रदान कर सकता है। एक उचित व्याख्या यह दर्शाती है कि यह समस्या का एक अच्छा समाधान क्यों है, यह दिखाते हुए इसके दीर्घकालिक मूल्य में बहुत सुधार करेगा , और यह भविष्य के पाठकों को अन्य, समान प्रश्नों के साथ और अधिक उपयोगी बना देगा। कृपया कुछ स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें, जिसमें आपके द्वारा की गई धारणाएँ शामिल हैं।
टोबी स्पाइट

0

पाओलो द्वारा स्काला के उत्तर का सरलीकृत और अद्यतन संस्करण:

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))
}

जेनेरिक स्ट्रिपिंग और SDK बिल्डरों द्वारा उत्पन्न ListObjectRequest का उपयोग करना।


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
मुझे लगता है कि यह जावा प्रोटोटाइप या कुछ और है, लेकिन कृपया इसे समझाएं।
डेंचो गुनचेव

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

लिपटी को लपेटने के लिए प्लंबम का उपयोग करें और आपके पास एक स्पष्ट वाक्यविन्यास होगा:

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

0

कृपया इस बैश स्क्रिप्ट को आज़माएं। यह कर्ल कमांड का उपयोग करता है, जिसमें किसी बाहरी निर्भरता की आवश्यकता नहीं होती है

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

तुम्हारे लिऐ शुभकामना।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.