Cách mã hóa và tải các tệp lớn lên web trong Laravel

Tram Ho

1. Giới thiệu

  • XIn chào mọi người hôm này mình có 1 bài viết về mã hóa tệp lớn khi upload dữ liệu lên hệ thống . Hôm nay mình muốn chỉ cho bạn cách tải lên và mã hóa các tệp lớn lên hệ thống , sử dụng package Laravel và FileVault .
  • Đầu tiên, mình sẽ giải thích một vài khái niệm và phương pháp mà chúng ta sẽ sử dụng .

2. Streaming Files to Amazon S3

Laravel đã cung cấp tất cả các công cụ cần thiết để tải tệp lên Amazon S3. Nếu bạn không biết cách thực hiện điều đó, hãy xem các hàm putFileputFileAs functions on the Storage facad . Với bất kỳ chức năng nào trong hai chức năng này, Laravel sẽ tự động quản lý việc truyền tệp đến một vị trí lưu trữ, chẳng hạn như Amazon S3. Tất cả bạn cần làm nó sẽ kiểu như này =)) :

Truyền tệp đến S3 có thể mất nhiều thời gian, tùy thuộc vào tốc độ mạng. Ngay cả khi các hàm putFileputFileAs truyền phát tệp theo phân đoạn thì tiêu tốn rất nhiều bộ nhớ . Quá trình có thể mất rất nhiều thời gian để hoàn thành, gây ra thời gian chờ. Đó là lý do tại sao nó khuyến khích chúng ta sử dụng queued jobs.

3. Using Queued Jobs

  • Hàng đợi cho phép bạn trì hoãn việc xử lý một tác vụ tốn thời gian. Trì hoãn các tác vụ tốn thời gian này sẽ tăng tốc đáng kể các yêu cầu web đến ứng dụng của bạn .
  • Chúng ta sẽ sử dụng hai công việc được ném vào queue riêng biệt, một cái để mã hóa tệp và một cái để tải tệp được mã hóa lên Amazon S3.
  • Trong Laravel, bạn có thể xâu chuỗi các queue để các công việc sẽ chạy theo trình tự. Bằng cách này, chúng ta có thể bắt đầu tải tệp lên S3 ngay sau khi tệp được mã hóa.

4. Configure Amazon S3

  • Trước tiên, bạn sẽ cần cấu hình S3 ở phía Amazon và tạo một nhóm nơi chúng ta sẽ lưu trữ các tệp được mã hóa. link config bạn có thể thảm khảo ở đây và ném vào file .env nhé .
  • Theo document của Laravel, chúng ta cũng cần cài đặt Flysystem adapter package thông qua composer :

  • Tiếp theo mình add 1 package cached adapter

5. Creating Queueable Jobs

  • đầu tiên sẽ make 2 file queue như đã nói ở trên là mỗi 1 queue sẽ phục vụ cho 1 việc riêng biệt

  • sẽ có 2 file queue đc tạo ra ở đây app/Http/Jobs

  • Như bạn có thể thấy, việc EncryptFile rất đơn giản – chúng ta chỉ sử dụng gói FileVault để mã hóa tệp và lưu nó vào cùng thư mục có cùng tên .

  • Thay vì mã hóa bằng FileVault bằng phương thức store, chúng ta dispatch nó vào hàng đợi như sau :

  • Tiếp theo, trong method index , mình gửi chúng ra cho người dùng :

  • Mình cũng cập nhật downloadFile của mình, chỉ định rằng muốn tải xuống và truyền tệp từ S3 thay vì hệ thống tệp cục bộ. Chúng tôi chỉ xâu chuỗi một cuộc gọi đĩa (‘s3) đến cả hai mặt tiền Storage và FileVault.

  • đây là những gì mình xử lý trong Controller :

  • Điều cuối cùng chúng ta cần làm là cập nhật home.blade.php, để chúng ta có thể hiển thị không chỉ các tệp người dùng đã được mã hóa và được lưu trữ vào S3 mà cả các tệp đang được mã hóa và tải lên S3.

6. Queue Configuration

  • Nếu bạn không thực hiện bất kỳ thay đổi nào đối với cấu hình hàng đợi, rất có thể bạn đang sử dụng đồng bộ (sync) được đặt mặc định trong Laravel. queue config
  • câu lệnh tạo model queue

  • sau đó chúng ta sẽ update QUEUE_CONNECTION trong file .env .

  • Tiếp theo chúng ta cần start queue :

7 Tổng kết

  • Bây giờ để kiểm tra những thay đổi, khi bạn tải lên một tập tin, bạn sẽ thấy rằng tập tin đó được hiển thị ngay lập tức trong phần Tải lên và mã hóa mã hóa trực tuyến.
Chia sẻ bài viết ngay

Nguồn bài viết : Viblo