Tải xuống tệp từ liên kết s3 laravel

Trước đây tôi đã từng làm việc với một số dự án sử dụng dịch vụ S3 của Amazon để lưu trữ hình ảnh và tệp từ các ứng dụng Laravel. Mặc dù chức năng được tích hợp khá nhiều vào khung, nhưng quá trình bắt đầu có thể hơi khó khăn, đặc biệt là đối với những người không có nhiều kinh nghiệm với bộ AWS

Tuy nhiên, lợi ích của việc sử dụng S3 có thể khá lớn, vì vậy tôi nghĩ rằng rất đáng để tổng hợp hướng dẫn ngắn gọn này về cách bắt đầu liên kết kho lưu trữ của ứng dụng Laravel mới [hoặc hiện có] của bạn với vùng lưu trữ Amazon S3

Không muốn tiếp tục đọc?

Tạo dự án của chúng tôi

Để giới thiệu chức năng lưu trữ, tôi sẽ xây dựng một trình tải lên hình ảnh siêu đơn giản trong Laravel

Điều đầu tiên là trước tiên, chúng ta sẽ cần ba lộ trình cho việc này. Mở tệp

php artisan make:controller ImageController
php artisan make:model Image --migration
8 của bạn và tạo hai yêu cầu GET và POST. Đây sẽ là trang đích ban đầu, lưu trữ hình ảnh và hiển thị một hình ảnh đã được tải lên. Cả ba sẽ sử dụng cùng một bộ điều khiển,
php artisan make:controller ImageController
php artisan make:model Image --migration
0, vì mục đích đơn giản

Đây là những gì tôi có cho điều đó

Route::get['/', 'ImageController@create'];
Route::post['/', 'ImageController@store'];
Route::get['/{image}', 'ImageController@show'];

Sau đó, trong bảng điều khiển của chúng tôi ở thư mục gốc của dự án, chúng tôi có thể tạo bộ điều khiển đó bằng thủ công. Ngoài ra, chúng tôi cũng có thể tạo mô hình với quá trình di chuyển của nó bằng cách sử dụng make. mô hình với cờ

php artisan make:controller ImageController
php artisan make:model Image --migration
1. Hãy xem nó trông như thế nào

php artisan make:controller ImageController
php artisan make:model Image --migration

Đối với ứng dụng minh họa này, chúng tôi không thực sự cần nhiều cột trong bảng cơ sở dữ liệu của mình cho hình ảnh. Tôi nghĩ tên tệp và url sẽ phù hợp với mục đích đó

Mở di chuyển mới trong thư mục

php artisan make:controller ImageController
php artisan make:model Image --migration
2, hãy sửa đổi nó để nó trông giống như sau

public function up[]
{
    Schema::create['images', function[Blueprint $table] {
        $table->bigIncrements['id'];
        $table->string['filename'];
        $table->string['url'];
        $table->timestamps[];
    }];
}

Nếu chúng ta nhìn lại tệp

php artisan make:controller ImageController
php artisan make:model Image --migration
8 của mình, chúng ta có thể thấy rằng chúng ta sẽ cần ba phương thức trong ImageController của chúng ta. tạo [], lưu trữ [] và cập nhật []

Tạo là một cách dễ dàng, theo nghĩa đen, chúng tôi chỉ muốn trả lại chế độ xem hiển thị biểu mẫu tải lên hình ảnh để chúng tôi có thể thêm hình ảnh và nhấp vào nút để gửi biểu mẫu. Tuy nhiên, Store cần một tham số yêu cầu để chúng tôi có thể lấy dữ liệu hình ảnh sau khi biểu mẫu đó đã được gửi và lưu trữ nó trên bộ chứa S3 của chúng tôi. Cuối cùng, bản cập nhật có thể có tham số Hình ảnh để chúng tôi có thể nhập gợi ý trả về và truyền trực tiếp hình ảnh được lưu trữ tới trình duyệt của người dùng

Hãy bắt đầu với hình thức của chúng tôi. Bằng cách sử dụng TailwindCSS và tệp

php artisan make:controller ImageController
php artisan make:model Image --migration
4, tôi đã tạo được biểu mẫu tải lên cơ bản nhất mà tôi có thể nghĩ ra

Đánh dấu cho điều này cũng đơn giản không kém, đó là một biểu mẫu đăng lên trang gốc, nơi chúng tôi đã tạo tuyến đường gửi dữ liệu đến phương thức

php artisan make:controller ImageController
php artisan make:model Image --migration
5

________số 8

Lưu hình ảnh cục bộ

Như với hầu hết mọi thứ khác, Laravel giúp việc lấy tệp của chúng ta cực kỳ dễ dàng sau khi nó được tải lên và lưu trữ cục bộ. Trong phương thức

php artisan make:controller ImageController
php artisan make:model Image --migration
6 của ImageController của chúng tôi, chúng tôi có thể gọi phương thức tệp trên đối tượng $request, chuyển qua tên tệp đầu vào của chúng tôi [
php artisan make:controller ImageController
php artisan make:model Image --migration
7]

Liên kết với điều đó, chúng ta có thể sử dụng phương thức store và chỉ định một đường dẫn cục bộ, đường dẫn này sẽ tự động lưu tệp hình ảnh [với tên được tạo ngẫu nhiên và phần mở rộng chính xác] vào đĩa cục bộ của chúng ta

Tất cả được gói gọn trong một dòng mã siêu đơn giản

Route::get['/', 'ImageController@create'];
Route::post['/', 'ImageController@store'];
Route::get['/{image}', 'ImageController@show'];
1

Bây giờ hãy trả lại đường dẫn đó cho trình duyệt

Sau đó, nếu chúng tôi quay lại biểu mẫu của mình trong trình duyệt web, chọn một hình ảnh để tải lên và nhấp vào nút 'Tải lên', chúng tôi sẽ hiển thị đường dẫn tệp tương đối tới hình ảnh được lưu trữ

Đi qua thư mục

php artisan make:controller ImageController
php artisan make:model Image --migration
8 của ứng dụng Laravel của chúng ta, chúng ta có thể thấy rằng một thư mục
php artisan make:controller ImageController
php artisan make:model Image --migration
9 mới đã được tạo và hình ảnh của chúng ta nằm bên trong đó

Thật tuyệt. Nó hoạt động cục bộ. Bây giờ là lúc chuyển chức năng này sang Amazon. Như tôi đã đề cập trước đó, Laravel có hầu hết những thứ này được xử lý ngay lập tức. Điều duy nhất mà chúng ta cần để liên kết điều này là 4 giá trị khác nhau trong tệp

public function up[]
{
    Schema::create['images', function[Blueprint $table] {
        $table->bigIncrements['id'];
        $table->string['filename'];
        $table->string['url'];
        $table->timestamps[];
    }];
}
0 của ứng dụng của chúng ta

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_DEFAULT_REGION
  • AWS_BUCKET

Hãy xem làm thế nào chúng ta có thể có được những

Thiết lập nhóm S3

Truy cập vào aws. amazon. com và tạo một tài khoản [hoặc đăng nhập bằng tài khoản hiện có của bạn]. Sau khi bạn vào, hãy nhìn vào thanh menu trên cùng và tìm mục 'Dịch vụ'. Nếu bạn nhấp vào đó, bạn sẽ mở ra một hộp có danh sách lớn các dịch vụ AWS của Amazon. Cuộn xuống và trong phần Lưu trữ, chọn 'S3'

Trên màn hình tiếp theo, bạn sẽ thấy danh sách bất kỳ bộ chứa S3 nào mà bạn đã tạo, cùng với nút "Tạo bộ chứa" màu xanh lam. bấm vào đó. Trên các trang tiếp theo, hãy nhập tên bộ chứa của bạn [tên này phải là duy nhất trên toàn bộ nền tảng AWS] và chọn khu vực thích hợp nhất cho bộ chứa của bạn

Phần còn lại của các trang sẽ giữ nguyên giá trị mặc định và tiếp tục nhấp vào nút tiếp theo cho đến khi bộ chứa của bạn được tạo thành công

Được rồi, chúng tôi có nhóm của mình, nhưng bây giờ chúng tôi cần thông tin đăng nhập để truy cập theo chương trình. Nhấp lại vào mục menu 'Dịch vụ', tìm kiếm IAM. Đây là viết tắt của Quản lý danh tính và truy cập và đó là nơi chúng tôi sẽ tạo các cặp id/bí mật cho vùng chứa mới được tạo của chúng tôi

Ở phía bên trái của màn hình này, nhấp vào mục 'Người dùng' trong nhóm Quản lý quyền truy cập. Trên trang tiếp theo, hãy nhấp vào nút 'Thêm người dùng' màu xanh lam

Điền tên người dùng cho người dùng của bạn và chọn hộp bên cạnh Quyền truy cập theo chương trình, điều này cho AWS biết rằng chúng tôi muốn tạo ID khóa và khóa truy cập bí mật cho người dùng này

Trang tiếp theo có lẽ sẽ là phần khó hiểu nhất của hướng dẫn này, và thành thật mà nói, nó khá đơn giản. Amazon cho phép bạn xác định quyền trên cơ sở từng người dùng và người dùng cũng có thể được gắn vào các nhóm nếu bạn có số lượng lớn họ cần quản lý

Đối với bản trình diễn đơn giản của chúng tôi [và trung thực là đối với hầu hết các dự án của tôi], tôi thích đi tới phần "Đính kèm trực tiếp các chính sách hiện có", tìm kiếm

public function up[]
{
    Schema::create['images', function[Blueprint $table] {
        $table->bigIncrements['id'];
        $table->string['filename'];
        $table->string['url'];
        $table->timestamps[];
    }];
}
1 và chọn hộp bên cạnh AmazonS3FullAccess. Điều này đảm bảo rằng người dùng của chúng tôi [có ID/bí mật được đính kèm], có toàn quyền truy cập đọc/ghi vào bộ chứa S3 của chúng tôi

Nhấp qua một số màn hình tiếp theo, giữ nguyên mọi thứ và người dùng của bạn sẽ được tạo thành công

Bạn sẽ ở trên màn hình chứa người dùng của bạn đã tạo, cùng với ID khóa truy cập và khóa truy cập Bí mật. Sao chép hai giá trị này vào tệp

public function up[]
{
    Schema::create['images', function[Blueprint $table] {
        $table->bigIncrements['id'];
        $table->string['filename'];
        $table->string['url'];
        $table->timestamps[];
    }];
}
0 của ứng dụng của bạn theo các tiêu đề thích hợp được liệt kê ở trên

Hai mục khác chúng tôi sẽ cần trong tệp

public function up[]
{
    Schema::create['images', function[Blueprint $table] {
        $table->bigIncrements['id'];
        $table->string['filename'];
        $table->string['url'];
        $table->timestamps[];
    }];
}
0 của mình, chúng tôi có thể lấy trực tiếp từ thùng của mình. Tên bạn đã sử dụng khi tạo và khu vực bạn đã chọn trong cùng một bước

Bây giờ, chúng ta chỉ cần yêu cầu Laravel sử dụng S3 thay vì đĩa cục bộ của chúng ta

Kết nối S3 với ứng dụng của chúng tôi

Quay lại phương pháp

php artisan make:controller ImageController
php artisan make:model Image --migration
6 của ImageController của chúng tôi, tất cả những gì chúng tôi phải làm là thực hiện một thay đổi duy nhất đối với một lớp lót lưu trữ các tệp của chúng tôi. Trong phương thức
php artisan make:controller ImageController
php artisan make:model Image --migration
6 sau 'hình ảnh', hãy thêm dấu phẩy và chuỗi 's3'

php artisan make:controller ImageController
php artisan make:model Image --migration
0

Điều này cho Laravel biết rằng bạn muốn sử dụng dịch vụ đĩa S3, được cung cấp sẵn trong cấu hình dịch vụ của ứng dụng của chúng tôi

Phần cuối cùng của kết nối này là cài đặt gói mà Laravel sử dụng làm cầu nối giữa ứng dụng của chúng tôi và bộ chứa S3 của chúng tôi. Bạn có thể làm điều đó với dòng sau từ thư mục gốc của ứng dụng

php artisan make:controller ImageController
php artisan make:model Image --migration
1

Được rồi, bây giờ hãy quay lại ứng dụng của chúng tôi và thử tải lên một tệp

nó hoạt động. Một đường dẫn được trả về, nhưng nếu chúng ta xem thư mục

public function up[]
{
    Schema::create['images', function[Blueprint $table] {
        $table->bigIncrements['id'];
        $table->string['filename'];
        $table->string['url'];
        $table->timestamps[];
    }];
}
6 của mình, không có gì mới. Đó là bởi vì nó đã được gửi đến nhóm S3 của chúng tôi. Nếu chúng tôi làm mới bộ chứa của mình, bây giờ sẽ có một thư mục có tên là hình ảnh và nhấp vào đó, chúng tôi sẽ thấy hình ảnh mà chúng tôi đã tải lên

Hãy đưa những mô hình mà chúng ta đã tạo trước đó vào sử dụng

Lưu hình ảnh vào cơ sở dữ liệu

Quay lại phương thức

php artisan make:controller ImageController
php artisan make:model Image --migration
6 trong ImageController của chúng ta, hãy tạo một đối tượng hình ảnh mới sau khi chúng ta lưu trữ hình ảnh của mình. Hãy nhớ rằng, chúng ta chỉ cần hai giá trị, tên tệp và url. Tên tệp chúng tôi có thể nhận được bằng phương thức PHP
public function up[]
{
    Schema::create['images', function[Blueprint $table] {
        $table->bigIncrements['id'];
        $table->string['filename'];
        $table->string['url'];
        $table->timestamps[];
    }];
}
8 và url chúng tôi có thể truy xuất thông qua trình trợ giúp URL của Mặt tiền lưu trữ. Đi qua đường dẫn đã lưu của hình ảnh của chúng tôi, nó sẽ trả lại URL đầy đủ cho đối tượng hình ảnh Amazon S3 của chúng tôi một cách thuận tiện

Đây là giao diện của việc tạo đối tượng mô hình

php artisan make:controller ImageController
php artisan make:model Image --migration
5

Bây giờ thay vì trả lại $path như trước đây, hãy trả lại toàn bộ đối tượng $image

Hãy quay lại biểu mẫu tải lên của ứng dụng, chọn một hình ảnh và nhấn Tải lên. Lần này, chúng tôi được trả lại một số JSON chứa ID, tên tệp và URL của mô hình hình ảnh của chúng tôi

Theo mặc định, URL hình ảnh đó hiện cũng đang bị khóa riêng tư. Nếu bạn nhấp vào nó, AWS sẽ trả về lỗi Truy cập bị từ chối và bạn không thể xem hình ảnh trực tiếp. Thay vào đó, chúng ta sẽ phải đi về nó theo một cách khác

Quay lại ImageController của chúng tôi, chúng tôi có một phương pháp

public function up[]
{
    Schema::create['images', function[Blueprint $table] {
        $table->bigIncrements['id'];
        $table->string['filename'];
        $table->string['url'];
        $table->timestamps[];
    }];
}
9, lấy ID hình ảnh của chúng tôi. Chúng tôi có thể sử dụng đối tượng Hình ảnh được gợi ý kiểu và nhờ có Mặt tiền lưu trữ một lần nữa, chúng tôi có thể truy xuất hình ảnh từ S3 và truyền phát hình ảnh đó dưới dạng phản hồi của trình duyệt với loại nội dung phù hợp. Tất cả điều đó với một dòng mã

php artisan make:controller ImageController
php artisan make:model Image --migration
7

Nếu chúng ta đi đến một đường dẫn trên ứng dụng của mình bằng Image ID vừa được trả lại cho chúng ta, Laravel sẽ truy xuất hình ảnh từ bộ chứa S3 của chúng ta và hiển thị trực tiếp trong trình duyệt

Đó là tất cả

Đó là về nó cho bây giờ

Bạn đã học thành công cách

  • Tải lên các tệp hình ảnh và lưu trữ chúng cục bộ
  • Thiết lập bộ chứa Amazon S3 và chỉ định thông tin xác thực
  • Chuyển đổi bộ lưu trữ đĩa cục bộ để sử dụng bộ chứa Amazon S3
  • Truy xuất hình ảnh từ nhóm S3 với Laravel

Nếu bạn muốn tìm hiểu thêm về phát triển Laravel, Amazon AWS hoặc các chủ đề phát triển web chung khác, vui lòng theo dõi tôi trên kênh YouTube hoặc Twitter của tôi

Làm cách nào để tải xuống tệp từ s3 trong laravel?

Tải xuống tệp Laravel từ Bộ chứa AWS S3 .
Bước 1 – Cài đặt ứng dụng Laravel
Bước 2 – Thiết lập thùng amazon s3
Bước 3 – Thiết lập thông tin đăng nhập lưu trữ đám mây amazon s3
Bước 4 – Cài đặt gói s3
Bước 5 – Tạo đường tải xuống tệp
Bước 6 – Tạo File Download Controller
Bước 7 – Bắt đầu phát triển máy chủ

Cho minh hoi tai s3 duoc ko a?

Bạn có thể tải xuống một đối tượng từ bộ chứa S3 theo bất kỳ cách nào sau đây. Chọn đối tượng và chọn Tải xuống hoặc chọn Tải xuống từ menu Tác vụ nếu bạn muốn tải đối tượng xuống một thư mục cụ thể . Nếu bạn muốn tải xuống một phiên bản cụ thể của đối tượng, hãy chọn nút Hiển thị phiên bản.

Làm cách nào để lấy dữ liệu từ thùng s3 trong laravel?

hãy làm theo các bước dưới đây. .
Bước 1. Tạo nhóm S3
Bước 2. Cài đặt Laravel 8
Bước 3. Cài đặt gói Amazon S3 Composer
Bước 4. Định cấu hình thông tin xác thực AWS S3
Bước 5. Tạo tuyến đường
Bước 6. Tạo bộ điều khiển tải lên hình ảnh
Bước 7. Tạo tập tin lưỡi dao

Làm cách nào để tải xuống tệp từ dòng lệnh AWS s3?

Bạn có thể sử dụng cp để sao chép các tệp từ bộ chứa s3 vào hệ thống cục bộ của mình. Sử dụng lệnh sau. $ aws s3 cp s3. //xô/thư mục/tệp. txt .

Chủ Đề