سؤال

كيف يمكنني إنشاء مجلد تحت دلو باستخدام boto مكتبة لـ Amazon S3؟

لقد تابعت الدليل ، وقمت بإنشاء المفاتيح بإذن وبيانات بيانات وما إلى ذلك ، ولكن لا يوجد مكان في وثائق بوتو ، فإنه يصف كيفية إنشاء مجلدات أسفل دلو ، أو إنشاء مجلد تحت مجلدات في دلو.

هل كانت مفيدة؟

المحلول

لا يوجد مفهوم للمجلدات أو الدلائل في S3. يمكنك إنشاء أسماء ملفات مثل "abc/xys/uvw/123.jpg", ، أي العديد من أدوات الوصول S3 مثل S3Fox أظهر مثل بنية الدليل ، لكنه في الواقع مجرد ملف واحد في دلو.

نصائح أخرى

افترض أنك تريد إنشاء مجلد ABC/ 123/ في دلوتك ، إنها قطعة من الكعكة مع بوتو

k = bucket.new_key('abc/123/')
k.set_contents_from_string('')

أو استخدم وحدة التحكم

مع AWS SDK .NET يعمل بشكل مثالي ، فقط أضف "/" في نهاية سلسلة اسم المجلد:

var folderKey =  folderName + "/"; //end the folder name with "/"
AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWSAccessKey, AWSSecretKey);
var request = new PutObjectRequest();
request.WithBucketName(AWSBucket);
request.WithKey(folderKey);
request.WithContentBody(string.Empty);
S3Response response = client.PutObject(request);

ثم قم بتحديث وحدة AWS الخاصة بك ، وسترى المجلد

إلحاق "_ $ volder $" إلى اسم المجلد الخاص بك و PUT.

    String extension = "_$folder$";
    s3.putObject("MyBucket", "MyFolder"+ extension, new ByteArrayInputStream(new byte[0]), null);

يرى:http://www.snowgiraffe.com/tech/147/creating-polders-programmally-with-amazon-s3s-api-putting-babies-in-buckets/

استخدم هذا:

import boto3
s3 = boto3.client('s3')
bucket_name = "YOUR-BUCKET-NAME"
directory_name = "DIRECTORY/THAT/YOU/WANT/TO/CREATE" #it's name of your folders
s3.put_object(Bucket=bucket_name, Key=(directory_name+'/'))

تحديث لعام 2019 ، إذا كنت ترغب في إنشاء مجلد مع Path Bucket_Name/Folder1/Folder2 ، يمكنك استخدام هذا الرمز:

from boto3 import client, resource

class S3Helper:

  def __init__(self):
      self.client = client("s3")
      self.s3 = resource('s3')

  def create_folder(self, path):
      path_arr = path.rstrip("/").split("/")
      if len(path_arr) == 1:
          return self.client.create_bucket(Bucket=path_arr[0])
      parent = path_arr[0]
      bucket = self.s3.Bucket(parent)
      status = bucket.put_object(Key="/".join(path_arr[1:]) + "/")
      return status

s3 = S3Helper()
s3.create_folder("bucket_name/folder1/folder2)

S3 ليس لديه بنية مجلد ، ولكن هناك شيء يسمى كمفاتيح.

يمكننا خلق /2013/11/xyz.xls وسيظهر كمجلد في وحدة التحكم. لكن جزء التخزين من S3 سيأخذ ذلك كاسم الملف.

حتى عند استرداد ، نلاحظ أنه يمكننا رؤية الملفات في مجلد معين (أو مفاتيح) باستخدام ListObjects الطريقة واستخدام Prefix معامل.

من السهل حقًا إنشاء مجلدات. في الواقع إنه مجرد إنشاء مفاتيح.

يمكنك رؤية رمزتي أدناه ، كنت أقوم بإنشاء مجلد مع utc_time كاسم.

تذكر أن تنتهي المفتاح '/' مثل أدناه ، يشير هذا إلى أنه مفتاح:

Key = 'Folder1/' + UTC_TIME + '/'

client = boto3.client('s3')
utc_timestamp = time.time()


def lambda_handler(event, context):

    UTC_FORMAT = '%Y%m%d'
    utc_time = datetime.datetime.utcfromtimestamp(utc_timestamp)
    utc_time = utc_time.strftime(UTC_FORMAT)
    print 'start to create folder for => ' + utc_time

    putResponse = client.put_object(Bucket='mybucketName',
                                    Key='folder1/' + utc_time + '/')

    print putResponse

على الرغم من أنه يمكنك إنشاء مجلد عن طريق إلحاق "/" إلى المجلد الخاص بك. تحت الغطاء ، يحافظ S3 على بنية مسطحة على عكس NFS العادية.

var params = {
            Bucket : bucketName,
            Key : folderName + "/"
        };
s3.putObject(params, function (err, data) {});

يبدو أنه يمكنك الآن إنشاء مجلدات في S3. لست متأكدًا منذ متى ، لكن لدي دلو في المنطقة "القياسية" ويمكنك اختيار إنشاء مجلد من Action Sropdown.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top