অ্যামাজন এস 3 বোটো - কিভাবে একটি ফোল্ডার তৈরি করবেন?


123

আমি কিভাবে botoঅ্যামাজন এস 3 এর জন্য লাইব্রেরি ব্যবহার করে একটি বালতির নীচে একটি ফোল্ডার তৈরি করতে পারি ?

আমি ম্যানুয়ালটি অনুসরণ করেছি এবং অনুমতিগুলি, মেটাডেটা ইত্যাদির সাহায্যে কীগুলি তৈরি করেছি, তবে বোটোর নথিতে যেখানে বালতিতে ফোল্ডার তৈরি করা যায় বা বালতিতে ফোল্ডারগুলির নীচে একটি ফোল্ডার তৈরি করা যায় তা বর্ণনা করা যায় না।


মনে হচ্ছে অ্যামাজন এস 3 এর ফোল্ডারের ধারণা নেই, কেউ কেউ "ফোল্ডার / টেস্ট.টেক্সট" এর মতো নামের সাথে কী তৈরি করার পরামর্শ দিয়েছিল। ফোল্ডার তৈরি করতে আমি ফায়ারফক্স এস 3 প্লাগইন ব্যবহার করে চেষ্টা করেছি এবং সমস্ত কী কী বোটোতে তালিকাভুক্ত করেছি, এটি আউটপুট আমি স্রেফ "<কী: উইটোশেরেস, প্রত্যেকে_ $ ফোল্ডার $>] হিসাবে তৈরি করা ফোল্ডারটি কীভাবে এই ফোল্ডারে থেকে / কীভাবে সামগ্রী দেখতে / যুক্ত / সংশোধন করতে পারি?
ভিটো হুয়াং

দ্রষ্টব্য: "ফোল্ডার" তৈরির জন্য এডাব্লুএস এস 3 ম্যানেজমেন্ট ইন্টারফেস বিকল্পটি এস 3 এফের সাথে সামঞ্জস্যপূর্ণ নয়, অর্থাৎ ইন্টারফেসটি ব্যবহার করে একটি "ফোল্ডার" তৈরি করুন এবং এস 3 এফএস মাউন্ট পয়েন্টের মাধ্যমে উল্লিখিত ফোল্ডারের একটি তালিকা পাওয়ার চেষ্টা করুন।
jldupont

নোট 2: এস 3 এফএসের মাধ্যমে একটি "ফোল্ডার" তৈরি করা যদিও এডাব্লুএস এস 3 ম্যানেজমেন্ট ইন্টারফেসের সাথে সামঞ্জস্যপূর্ণ।
jldupont

বোটোর সাহায্যে এটি কীভাবে করা যায় তার উদাহরণের জন্য নীচে @ জাএএচএক্স উত্তর দেখুন। সহজ!
e.thompsy

উত্তর:


134

এস 3-তে ফোল্ডার বা ডিরেক্টরি সম্পর্কিত কোনও ধারণা নেই। আপনি যেমন ফাইলের নাম তৈরি করতে পারেন "abc/xys/uvw/123.jpg", যা অনেকগুলি এস 3 অ্যাক্সেস সরঞ্জাম S3Foxএকটি ডিরেক্টরি কাঠামোর মতো দেখায়, কিন্তু এটি আসলে একটি বালতিতে কেবল একটি ফাইল।


1
উত্তরের জন্য ধন্যবাদ, সুতরাং আমি অনুমান করি যদি আমি কোনও নির্দিষ্ট ফোল্ডারের বিষয়বস্তু দেখতে চাই, তবে আমাকে অন্যান্য অপ্রয়োজনীয় ফাইলগুলি অতিক্রম করতে হবে?
ভিটো হুয়াং

7
ফোল্ডারগুলির খুব ভাল সংজ্ঞায়িত ধারণা রয়েছে। উত্তরটি ভুল .. নীচে এলরানু উত্তর দেখুন।
বপপিটি বুপ

19
@BoppityBop: নেই ফোল্ডার কোন ধারণা মধ্যে এস 3ম্যানেজমেন্ট কনসোল এবং অনেক সরঞ্জাম স্ল্যাশ সহ কীগুলি উপস্থাপন করে যদিও এস 3 এর ফোল্ডার নেই । দেখুন ওয়ার্কিং ফোল্ডার সঙ্গে : পড়তে অংশ "তাহলে কনসোল ব্যবহারের বর্তমান ফোল্ডার ও অনুক্রমের চাবিকাঠি নাম আপত্তি। সালে আমাজন এস 3, আপনি শুধুমাত্র বাকেট এবং বস্তু আছে। "
Antti Haapala

7
এটি প্রযুক্তিগতভাবে কোনও ফোল্ডার নাও হতে পারে তবে অবশ্যই ফোল্ডার সমর্থন বলে মনে হচ্ছে। অ্যাবস কনসোলে বালতিটির দিকে তাকানোর সময় আপনি "ফোল্ডার তৈরি করুন" ক্লিক করতে পারেন এবং এটি একটি তৈরি করবে এবং সেগুলি খালি থাকতে পারে এবং সেগুলি থেকে মেটা ডেটা টানতে পারে।
ফাজেই

4
এস 3 হ'ল একটি বিশাল, কাস্টম ডায়নামোডিবি কী-মান স্টোর। কিছু সরঞ্জাম (এডাব্লুএস ওয়েব কনসোল সহ) এমন কিছু কার্যকারিতা সরবরাহ করে যা ডিরেক্টরি ট্রি অনুকরণ করে তবে আপনি যদি অ্যাপ্লিকেশনগুলি কোনও ফাইল সিস্টেমের সমতুল্য বলে ধরে নেন তবে আপনি এটির সাথে কাজ করার চেয়ে S3 এর বিপরীতে কাজ করবেন। উদাহরণস্বরূপ, ডিরেক্টরি হিসাবে প্রদর্শিত ডিরেক্টরিটির পুনঃনামকরণের জন্য কীস্পেসের মাধ্যমে স্ক্যান করা এবং প্রশ্নে 'ডিরেক্টরি নাম' যুক্ত প্রতিটি কী সংশোধন করা দরকার। অন্যদিকে, কী-মূল্যের স্টোর হওয়ার কারণে, 'প্যারেন্ট ডিরেক্টরী' তৈরি বা 'ফাঁকা ফোল্ডার' পরিষ্কার করার দরকার নেই, যা কোনও ফাইল সিস্টেমের নকল করার প্রয়োজন পড়বে
স্কুটার-ডাংল

51

ধরে নিন আপনি নিজের বালতিতে abc / 123 / ফোল্ডার তৈরি করতে চান, এটি বোটোর সাথে এক টুকরো পিঠা

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

বা কনসোল ব্যবহার করুন


7
এটা সঠিক উত্তর. বোটোর মাধ্যমে এটি সম্ভব এবং আপনি এটি এটিই করেন। আসলে new_key()আপনার যা প্রয়োজন তা হল। ফাংশনে প্রেরিত স্ট্রিংটি হতে পারে abc/123/বা abc/123/newfile.txt। যা কিছু তুমি পছন্দ কর. আমি যা আশা করি তা পাওয়ার মতো চেষ্টা করার পরে আমি যদি একটি বিবৃতিতে key = bucket.get_key(upgrade_path) if key is None: key = bucket.new_key(upgrade_path)এটি গুটিয়ে রাখতে চাই: মূলত, এটি সেখানে না থাকলে এটি তৈরি করুন!
e.thompsy

1
সর্বশেষ এপিআই সহ, বালতি.কি ('abc / 123 /') একই ফলাফল অর্জন করবে।
light94

ডিরেক্টরি কী নির্দিষ্ট করেও মাল্টিপার্ট আপলোডগুলিতে ফাইল আপলোড করার সাথে কাজ করেmp = self._bucket.initiate_multipart_upload(bucket_key)
طوفان_ম 2138

20

এডাব্লুএস এসডিকে দিয়ে। নেট পুরোপুরি কাজ করে, ফোল্ডারের নামের স্ট্রিংয়ের শেষে "/" যুক্ত করুন:

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 কনসোলটি রিফ্রেশ করুন এবং আপনি ফোল্ডারটি দেখতে পাবেন


এডাব্লুএস :: এস 3 রুবি লাইব্রেরির সাহায্যে এটি চেষ্টা করে দেখুন। এটিতে একটি ফাঁকা ফাইল নাম সহ একটি ফাইল সহ একটি "ফোল্ডার" তৈরি করে ... সুতরাং এটি সত্যিই কাজ করে না। মোহাম্মদ আসগরীর সমাধান ঠিকঠাক হলেও!
নিকো

@ নিকো তবে আপনি কি কোড মন্তব্যে যেমন বলেছেন তেমন একটি "/" দিয়ে ফাইলের নামটি শেষ করেছেন?
এলরানু

হ্যাঁ, আমি স্ল্যাশ যুক্ত করেছি। আমি AWS :: S3 :: S3Object.store ('পরীক্ষা /', '', 'আমার_বকেট') করেছি
নিকো

খালি স্ট্রিং ব্যবহার করে "পুটবজেক্ট" জারি করা হয়েছে এবং শেষের দিকে স্ল্যাশ আমার পক্ষে কাজ করেছে। আমি টিপিও / অ্যামাজন-এস 3-পিএইচপি-শ্রেণীর লাইব্রেরি সহ পিএইচপি ব্যবহার করছি।
মাইকমুরকো

2
@ বুপিটিপোপ হ্যাঁ এটির একটি ফোল্ডার বোতাম রয়েছে তবে এটি সম্ভবত কিছুটা খালি ফাইলও তৈরি করে
জামিলাক

15

এটা ব্যবহার কর:

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

সহায়তার জন্য ধন্যবাদ, আমি ত্রুটির নীচে পাচ্ছি। আপনি দয়া করে আমাকে সাহায্য করতে পারেন .botocore.exferences.NoCredentialsError: শংসাপত্রগুলি সনাক্ত করতে অক্ষম
আনভেশ

1
আপনাকে আপনার আউস শংসাপত্রগুলি কোনওভাবে বা অন্যভাবে নির্দিষ্ট করতে হবে। এটি দেখুন: boto3.readthedocs.io/en/latest/guide/…
দীপক জিএম

ধন্যবাদ! এটি আমার পক্ষে খুব ভালভাবে কাজ করেছে:)
igorkf

7

আপনার ফোল্ডারের নাম এবং কল পুটে "_ $ ফোল্ডার $" যুক্ত করুন।

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

দেখুন: http://www.snowgiraffe.com/tech/147/creating-folders-programically-with-amazon-s3s-api-putting-babies-in-buckets/


ফোল্ডার তৈরি করার এই পদ্ধতিটি আর কাজ করছে না। আপনি @ টমএনজি
র‌্যাডালিন

4

ফোল্ডার তৈরি করা সত্যিই সহজ। আসলে এটি কেবল কী তৈরি করছে।

আপনি আমার নীচের কোডটি দেখতে পাচ্ছেন আমি নাম হিসাবে utc_time দিয়ে একটি ফোল্ডার তৈরি করছিলাম।

মনে রাখবেন কী নীচে '/' দিয়ে কীটি শেষ হয় , এটি এটি একটি চাবি নির্দেশ করে:

কী = 'ফোল্ডার 1 /' + উত্স_টাইম + '/'

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

4

2019 এর জন্য আপডেট করুন, আপনি যদি পাথ বালতি_নাম / ফোল্ডার 1 / ফোল্ডার 2 দিয়ে একটি ফোল্ডার তৈরি করতে চান তবে আপনি এই কোডটি ব্যবহার করতে পারেন:

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)

1

যদিও আপনি আপনার ফোল্ডার নামটিতে "/" যুক্ত করে একটি ফোল্ডার তৈরি করতে পারেন। হুডের নীচে, এস 3 আপনার নিয়মিত এনএফএসের বিপরীতে সমতল কাঠামো বজায় রাখে।

ভার প্যারাম = {
            বালতি: বালতি নাম,
            কী: ফোল্ডার নাম + "/"
        };
s3.putObject (প্যারাম, ফাংশন (ত্রুটি, ডেটা) {});

1

উপরের অনেক পদ্ধতি ব্যবহার করে চেষ্টা করেছি এবং /কী নামের শেষে ফরোয়ার্ড স্ল্যাশ যুক্ত করে ডিরেক্টরি তৈরি করতে আমার পক্ষে কাজ হয়নি:

client.put_object(Bucket="foo-bucket", Key="test-folder/")

Bodyডিরেক্টরি তৈরি করতে আপনাকে প্যারামিটার সরবরাহ করতে হবে:

client.put_object(Bucket='foo-bucket',Body='', Key='test-folder/')

সূত্র: বোটো 3 ইস্যুতে রায়টাক


0

এস 3 এর কোনও ফোল্ডার কাঠামো নেই, তবে কী হিসাবে পরিচিত এমন কিছু আছে।

আমরা /2013/11/xyz.xlsকনসোলে ফোল্ডার হিসাবে তৈরি করতে পারি এবং প্রদর্শিত হবে। তবে এস 3 এর স্টোরেজ অংশটি ফাইলের নাম হিসাবে গ্রহণ করবে।

পুনরুদ্ধারের সময়ও আমরা লক্ষ্য করি যে ListObjectsপদ্ধতিটি ব্যবহার করে এবং Prefixপ্যারামিটারটি ব্যবহার করে আমরা নির্দিষ্ট ফোল্ডারে (বা কী) ফাইলগুলি দেখতে পারি ।


0

স্পষ্টতই আপনি এখন এস 3 এ ফোল্ডার তৈরি করতে পারেন। আমি কখন থেকে নিশ্চিত নই, তবে আমার কাছে "স্ট্যান্ডার্ড" জোনে একটি বালতি রয়েছে এবং অ্যাকশন ড্রপডাউন থেকে ফোল্ডার তৈরি করুন চয়ন করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.