S3 kiểm tra xem thư mục có tồn tại không nodejs

Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách sử dụng AWS SDK cho. NET để thực hiện một số thao tác tệp cơ bản trên nhóm S3. AWS cung cấp cả API cấp thấp và cấp cao. Trước tiên, chúng ta sẽ xem cách sử dụng API cấp thấp, sau đó chúng ta sẽ thực hiện các thao tác tương tự bằng API cấp cao

Để chạy đoạn mã sau, bạn cần cài đặt AWSSDK. Gói S3 Nuget

Tôi đã tạo một nhóm S3 có tên. tên-nhóm-của-tôi-123 và tôi đã tạo một thư mục có tên là thư mục của tôi bên trong nhóm,

Working With Files And Folders In S3, Using AWS SDK For .NET 

API cấp thấp

API cấp thấp được ánh xạ chặt chẽ với API REST cơ bản, ở đây chúng tôi sử dụng đối tượng Yêu cầu để cung cấp thông tin yêu cầu và AWS phản hồi bằng đối tượng Phản hồi

Hiểu Đường dẫn S3 (khi sử dụng API cấp thấp)

Đầu tiên chúng ta cần hiểu rằng trong S3 không có khái niệm thư mục, mọi thứ đều là đối tượng. Nếu tôi muốn tạo một thư mục có tên là thư mục con, tôi cần thêm dấu / vào tên thư mục để AWS biết rằng thứ tôi muốn là thư mục chứ không phải tệp. vì vậy tôi cần phải tạo ra,

my-s3-bucket-name-123/my-folder/sub-folder/

Nếu tôi không bao gồm dấu gạch chéo ở cuối AWS sẽ tạo một đối tượng có tên là thư mục con thay vì thư mục

Đang khởi tạo AmazonS3Client

Đây là cách chúng tôi khởi tạo ứng dụng khách S3 mà chúng tôi sẽ sử dụng cho các ví dụ còn lại,

  1. string bucketName = "my-bucket-name-123";
  2. chuỗi awsAccessKey = "AKI. “;
  3. chuỗi awsSecretKey = "+8Bo. “;
  4. IAmazonS3 client = mới AmazonS3Client(_awsAccessKey, _awsSecretKey, RegionEndpoint. APSoutheast2);

Lưu ý
AmazonS3Client là chuỗi an toàn, bạn có thể đặt nó ở dạng tĩnh hoặc sử dụng một phiên bản đơn âm.

Tạo một thư mục

Ở đây chúng ta sẽ tạo một thư mục có tên là thư mục con bên trong thư mục của tôi

  1. chuỗi đường dẫn thư mục = "thư mục của tôi/thư mục con/";
  2. PutObjectRequest yêu cầu = mới PutObjectRequest()
  3. {
  4. BucketName = _bucketName,
  5. };
  6. PutObjectResponse phản hồi = ứng dụng khách. PutObject(yêu cầu);

Lưu ý1
Nếu bạn quên dấu gạch chéo ở cuối đường dẫn (i. e. "thư mục của tôi/thư mục con") nó sẽ tạo một đối tượng gọi là thư mục con.

Lưu ý2
Nếu bạn bao gồm dấu gạch chéo ở đầu đường dẫn (i. e. "/my-folder/sub-folder/") nó sẽ tạo một thư mục có tên là một chuỗi trống và đặt các thư mục còn lại vào trong đó.

Sao chép một tập tin vào một thư mục

Đoạn mã sau sẽ sao chép bài kiểm tra. txt bên trong thư mục con,

  1. FileInfo tệp = mới FileInfo(@"c. \kiểm tra. txt");
  2. chuỗi đường dẫn = "thư mục của tôi/thư mục con/kiểm tra. txt";
  3. PutObjectRequest yêu cầu = mới PutObjectRequest()
  4. {
  5. InputStream = tệp. MởĐọc(),
  6. BucketName = _bucketName,
  7. };
  8. PutObjectResponse phản hồi = ứng dụng khách. PutObject(yêu cầu);

Liệt kê nội dung của một thư mục

Đoạn mã sau sẽ liệt kê nội dung của thư mục con,

  1. ListObjectsRequest yêu cầu = ListObjectsRequest mới
  2. {
  3. BucketName = _bucketName,
  4. Tiền tố = "thư mục của tôi/thư mục con/"
  5. };
  6. ListObjectsResponse phản hồi = ứng dụng khách. ListObjects(yêu cầu);
  7. foreach (S3Object obj in response. S3Object)
  8. {
  9. Bảng điều khiển. WriteLine(obj. Chìa khóa);
  10. }

Xóa tệp/thư mục

Trong đoạn mã sau, trước tiên chúng tôi xóa bài kiểm tra. txt rồi đến thư mục con,

  1. chuỗi filePath = "thư mục của tôi/thư mục con/kiểm tra. txt";
  2. var deleteFileRequest = new DeleteObjectRequest
  3. {
  4. BucketName = _bucketName,
  5. Khóa = đường dẫn tệp
  6. };
  7. DeleteObjectResponse fileDeleteResponse = ứng dụng khách. DeleteObject(xóaFileRequest);
  8. chuỗi đường dẫn thư mục = "thư mục của tôi/thư mục con/";
  9. var deleteFolderRequest = new DeleteObjectRequest
  10. {
  11. BucketName = _bucketName,
  12. Khóa = đường dẫn thư mục
  13. };
  14. DeleteObjectResponse thư mụcDeleteResponse = ứng dụng khách. DeleteObject(xóaFolderRequest);

API cấp cao

API cấp cao được thiết kế để bắt chước ngữ nghĩa của hoạt động I/O tệp. Chúng rất giống với cách làm việc với FileInfo và Directory.  

Hiểu đường dẫn S3 (khi sử dụng API cấp cao)

Khi sử dụng API cấp cao, chúng tôi cần sử dụng đường dẫn kiểu của cửa sổ, vì vậy hãy sử dụng dấu gạch chéo ngược (KHÔNG phải dấu gạch chéo) trong đường dẫn của bạn,

"thư mục của tôi\thư mục con\test. txt"

Cũng lưu ý rằng, tương tự như các API cấp thấp, chúng tôi cần dấu gạch chéo ngược ở cuối để biểu thị một thư mục, ví dụ: "thư mục của tôi\thư mục con\" cho biết thư mục con là một thư mục trong khi "thư mục của tôi\thư mục con .  

Đang khởi tạo AmazonS3Client

Sử dụng mã giống như API cấp thấp (ở trên) để khởi tạo AmazonS3Client.   

 

Tạo một thư mục

Ở đây, chúng ta sẽ tạo một thư mục có tên là thư mục cấp cao và tạo một thư mục khác có tên là thư mục của tôi bên trong thư mục đó

  1. string path = @"high-level-folder";
  2. S3DirectoryInfo di = mới S3DirectoryInfo(ứng dụng khách, _bucketName, đường dẫn);
  3. nếu (. đi. tồn tại)
  4. {
  5. đi. Tạo ra();
  6. đi. CreateSubdirectory("thư mục con");
  7. }

Sao chép tập tin vào thư mục

Đoạn mã sau sẽ sao chép bài kiểm tra. txt bên trong thư mục con,

  1. FileInfo localFile = new FileInfo(@"c. \kiểm tra. txt");
  2. string path = @"high-level-folder\sub-folder\test. txt";
  3. S3FileInfo s3File = new S3FileInfo(ứng dụng khách, _bucketName, đường dẫn);
  4. nếu (. s3Tệp. tồn tại)
  5. {
  6. {
  7. }
  8. }

Liệt kê nội dung của một thư mục

Đoạn mã sau sẽ liệt kê nội dung của thư mục con,

  1. string path = @"high-level-folder\sub-folder\";
  2. S3DirectoryInfo di = mới S3DirectoryInfo(ứng dụng khách, _bucketName, đường dẫn);
  3. IS3FileSystemInfo[] tệp = di. GetFileSystemInfos();
  4. foreach (tệp S3FileInfo trong tệp)
  5. {
  6. Bảng điều khiển. WriteLine($"{file. Tên}");
  7. }

Lưu ý
Không giống như API cấp thấp, ở đây tên thư mục (thư mục con) không được liệt kê.

Xóa tệp/thư mục

Trong đoạn mã sau, trước tiên chúng tôi xóa kiểm tra. txt và sau đó thư mục con,

  1. chuỗi filePath = @"thư mục cấp cao\thư mục con\test. txt";
  2. S3FileInfo s3File = new S3FileInfo(client, _bucketName, filePath);
  3. nếu (s3File. tồn tại)
  4. {
  5. s3Tệp. Xóa bỏ();
  6. }
  7. chuỗi đường dẫn thư mục = @"thư mục cấp cao\thư mục con\";
  8. Thư mục S3DirectoryInfo = mới S3DirectoryInfo(ứng dụng khách, _bucketName, đường dẫn thư mục);
  9. nếu (thư mục. tồn tại)
  10. {
  11. danh mục. Xóa bỏ();
  12. }

kết thúc

Khi thiết kế hệ thống thông tin, chúng tôi tuân theo một thông lệ được gọi là nguồn sự thật duy nhất (SSOT), nó đảm bảo rằng mọi phần tử dữ liệu chỉ được chỉnh sửa ở một nơi. SSOT đơn giản hóa hệ thống thông tin và làm việc với nó dễ dàng hơn rất nhiều. Cá nhân tôi muốn mở rộng phương pháp này đến mọi khía cạnh của thiết kế. khi thiết kế giao diện người dùng, không có ích gì khi cung cấp cho người dùng 2 cách khác nhau để mua sản phẩm, nó làm phức tạp giao diện người dùng và gây nhầm lẫn cho người dùng. nguyên tắc này đóng một vai trò quan trọng khi thiết kế Shopless

Theo tôi, thiết kế thư viện phần mềm cũng vậy. Tôi nghĩ rằng bằng cách cung cấp 2 API khác nhau (cấp thấp và cấp cao), AWS đã làm phức tạp quá trình giao tiếp với bộ chứa S3 một cách không cần thiết, đặc biệt là do các API này sử dụng các đường dẫn khác nhau của hệ thống. cá nhân tôi đã dành hàng giờ cho một lỗi vì tôi đang sử dụng đường dẫn kiểu cấp cao, với các API cấp thấp. Bây giờ, để làm cho vấn đề trở nên tồi tệ hơn, AWS đang cung cấp thêm một cách khác để tương tác với các bộ chứa S3, đó là sử dụng AWS TransferUtility chạy trên API cấp thấp và là cách được đề xuất để đọc/ghi các đối tượng lớn (lớn hơn một . Hãy xem tài liệu AWS này và xem tài liệu nào là lựa chọn tốt nhất cho nhu cầu của bạn

Làm cách nào để kiểm tra xem một thư mục có tồn tại trong S3 bucket nodejs không?

Điều này có thể được thực hiện bằng cách sử dụng phương thức listObjectV2 , như vậy. hằng số s3 =. // Máy khách S3 const Bucket = 'mybucket'; . const params = { Xô, Tiền tố, MaxKeys }; .

Làm cách nào để kiểm tra xem thư mục có tồn tại trong nhóm S3 C# không?

Bạn chỉ có thể chuyển khóa (Ví dụ: nếu 'Test' là một bộ chứa S3 và có một thư mục 'InTest' trong bộ chứa, nếu bạn phải kiểm tra xem 'InTest' có tồn tại hay không, thì khóa đó chỉ là 'InTest') cho

S3 có thể kích hoạt Lambda không?

Amazon S3 có thể gửi một sự kiện đến hàm Lambda khi một đối tượng được tạo hoặc xóa . Bạn định cấu hình cài đặt thông báo trên bộ chứa và cấp quyền cho Amazon S3 để gọi một chức năng theo chính sách quyền dựa trên tài nguyên của chức năng đó.

Làm cách nào để tạo một thư mục trong nhóm S3 bằng Java?

Tạo thư mục S3. Liệt kê đối tượng S3. Tải lên tệp S3 (Bảng điều khiển) Tải lên tệp S3 (Servlet) .
Thư mục thực sự trong Amazon S3 là gì? . .
Tạo một thư mục trong S3 Bucket. .
Đợi cho đến khi thư mục tồn tại