Tùy chọn để xử lý tải lên tệp lớn (nhiều gigabyte)


8

Làm thế nào bạn có thể thực hiện chức năng tải lên tệp rất lớn với ứng dụng Django và S3?

Trong công việc phụ của tôi là một nhiếp ảnh gia, tôi có một số khách hàng mà tôi có nhu cầu chia sẻ các tệp lưu trữ nhiều gigabyte (zip, tar) với các bản gốc cũng như các hình ảnh được xử lý của sự kiện này. Cho đến bây giờ, chúng tôi đã sử dụng Google Drive cho việc này, trong đó tôi tải tệp lên GD và họ sẽ truy xuất và lưu trong ổ lưu trữ cục bộ. Thỉnh thoảng tôi dọn dẹp thư mục GD, vì các tệp được tải lên được nhân đôi trên máy tính của tôi thông qua ứng dụng khách Mac Google Drive. Cho rằng máy Mac của tôi chỉ có ổ đĩa 256GB, dung lượng là cao cấp.

Một khách hàng đã có hai lần hỏng ổ cứng trong bốn tháng qua, trong đó mười năm trước tôi không có việc làm. Vì vậy, họ muốn một giải pháp tốt hơn, và tôi đã là một nhà phát triển, vậy tại sao không?

Bây giờ, câu hỏi đặt ra là liệu trình duyệt có chịu trách nhiệm cho việc xếp hàng và vận chuyển tệp lưu trữ 12 gigabyte đến máy chủ của tôi hay không, qua đó nó sẽ trải qua một số lần quét thuộc tính trước khi được chuyển sang S3.

Tôi có thể thấy hai tùy chọn với điều này:

  1. Sử dụng trình duyệt với biểu mẫu tải lên tệp để tải lên tệp Đa phần lên máy chủ. Sau khi hoàn thành, tệp sẽ được kiểm tra và xử lý bởi tác vụ Celery cục bộ và sau đó được tải lên nhóm S3.
  2. Thực hiện lệnh Django Management để kích hoạt thực thi tác vụ Celery xử lý tệp cục bộ và sử dụng tập lệnh Python cục bộ bằng Paramiko để tải lên tệp và kích hoạt thực thi lệnh quản lý khi quá trình tải lên hoàn tất.

Cá nhân, tôi đang nghiêng về lựa chọn 2, nhưng muốn những ý tưởng khác nếu có thể.


3
Tôi không quen thuộc với các chi tiết của Django và Celery, nhưng dù bạn chọn giải pháp nào, có lẽ bạn nên làm cho nó mạnh mẽ đến mức bạn có thể tiếp tục tải lên thành công một phần sau đó sau khi bị gián đoạn. Sử dụng tài liệu lưu trữ đa phần có thể là một ý tưởng tốt cho việc này, cùng với tổng kiểm tra cho từng phần.
Doc Brown

Mặc dù vậy, tôi sẽ cố gắng chống lại sự cám dỗ để phát minh lại rsync . Có vẻ như nó là công cụ cho công việc của bạn.
5gon12eder

Câu trả lời:


1

Thông qua các cuộc trò chuyện với những người khác về chủ đề này, tôi nghĩ rằng tôi đã đưa ra một giải pháp:

  1. Tải tệp lưu trữ lên S3
  2. Hành động tải lên trả về ID S3, có thể được gửi đến điểm cuối API
  3. Máy chủ lấy tệp và chuyển đến tác vụ Celery để xử lý.
  4. TÙY CHỌN : email được gửi đến người dùng / nhóm mà

Để thực hiện điều này, những điều sau đây sẽ phải được thực hiện:

  1. Viết tập lệnh Python để sử dụng Tải lên nhiều phần của Boto3
  2. Cuộc gọi phương thức Boto3 sẽ trả về một tham chiếu đến đối tượng, sau đó có thể được POSTchuyển thành điểm cuối API REST
  3. Máy chủ truy xuất tệp gần như ngay lập tức qua kết nối cáp quang nhanh và bắt đầu công việc không đồng bộ để xử lý thời gian.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.