Amazon S3 Boto - كيفية إنشاء مجلد؟
سؤال
كيف يمكنني إنشاء مجلد تحت دلو باستخدام 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);
استخدم هذا:
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.