2009-06-09 43 views
6

Tôi biết điều này đã được hỏi trước nhưng thực sự không có câu trả lời rõ ràng. Vấn đề của tôi là tôi đã xây dựng một tập lệnh tải lên tệp cho GAE và chỉ phát hiện ra sau đó, rằng bạn chỉ có thể lưu trữ tệp lên aprox. 1MB trong kho dữ liệu. Tôi có thể ngăn bạn ngay tại đây nếu bạn có thể cho tôi biết rằng nếu tôi bật thanh toán giới hạn 1MB là lịch sử nhưng tôi nghi ngờ điều đó.Tải lên tệp của Google App Engine và Amazon S3

Tôi cần có thể tải lên tối đa 20MB cho mỗi tệp vì vậy tôi nghĩ có lẽ tôi có thể sử dụng S3 của Amazon. Bất kỳ ý tưởng về cách thực hiện điều này?

Tôi được yêu cầu sử dụng kết hợp GAE + Ec2 và S3 nhưng tôi không biết làm thế nào điều này sẽ hoạt động.

Cảm ơn, Max

Trả lời

13

Từ Amazon S3 documentation:

  1. Người dùng mở một trình duyệt web và truy cập trang web của bạn.

  2. Trang web của bạn chứa biểu mẫu HTTP chứa tất cả thông tin cần thiết để người dùng tải nội dung lên Amazon S3.

  3. Người dùng tải nội dung trực tiếp lên Amazon S3.

GAE chuẩn bị và phục vụ trang web, thao tác nhanh chóng. Người dùng của bạn tải lên S3, một hoạt động dài, nhưng đó là giữa trình duyệt của người dùng và Amazon; GAE không liên quan.

Một phần của giao thức S3 là success_action_redirect, cho phép bạn cho S3 biết vị trí cần trình duyệt trong trường hợp tải lên thành công. Chuyển hướng đó có thể là GAE.

+0

Ok âm thanh tuyệt vời và tôi chắc chắn sẽ làm điều đó như thế này. Bạn sẽ tiếp tục như thế nào nếu bạn muốn lưu trữ thông tin về tệp trên Cửa hàng dữ liệu GAE? Giống như người dùng đã lưu trữ nó và loại mime chẳng hạn? – mistero

+0

Lưu trữ thông tin đó khi người dùng yêu cầu trang 'chuyển hướng'. Bạn có thể thực hiện yêu cầu HEAD trên tệp mới tải lên để tìm nạp siêu dữ liệu, nếu cần. –

+0

Còn vấn đề bảo mật thì sao? Tôi có nghĩa là không có cách nào để xác nhận hợp lệ dữ liệu (ngoại trừ AJAX) trong biểu mẫu trước khi gửi nó đến S3 phải không? Vì vậy, về cơ bản nếu tôi đặt giá thầu CPC kích thước tệp trong biểu mẫu như Amazon cho thấy bạn chỉ có thể viết biểu mẫu của riêng bạn và tải lên nhóm của tôi? Và siêu dữ liệu tôi sẽ thêm vào trong biểu mẫu cũng có thể dễ dàng được sửa đổi ... – mistero

3

Google App Engine và EC2 là đối thủ cạnh tranh. Họ làm điều tương tự, mặc dù GAE cung cấp một môi trường cho ứng dụng của bạn chạy với các hạn chế ngôn ngữ nghiêm ngặt, trong khi EC2 cung cấp cho bạn một máy ảo (nghĩ VMWare) để lưu trữ ứng dụng của bạn.

Mặt khác S3 là api lưu trữ thô. Bạn có thể sử dụng một SOAP hoặc REST api để truy cập nó. Nếu bạn muốn gắn bó với GAE, bạn có thể chỉ cần sử dụng Amazon S3 Python Library để thực hiện các cuộc gọi REST từ Python đến S3.

Bạn sẽ, tất nhiên, phải trả tiền cho việc sử dụng trên S3. Thật tuyệt vời về mức độ thanh toán của họ. Khi bắt đầu, tôi đã bị tính phí 4 xu một tháng.

+0

Được rồi, cho đến nay rất tốt. Nhưng nếu tôi có một tệp 20MB và tôi sử dụng Thư viện Python S3 của Amazon để gửi tệp đó tới S3 ... thì GAE sẽ không giết quá trình này vì phải mất hơn 30 giây? – mistero

+0

Thành thật mà nói, tôi không thực sự biết giới hạn của GAE, tôi chỉ xem xét nó một thời gian ngắn và những sai sót của nó là cách rõ ràng và hạn chế cho việc sử dụng cụ thể của tôi. Thành thật mà nói, bên ngoài thực tế họ có một phiên bản miễn phí có sẵn, tôi thấy rất ít để giới thiệu nó. – Serapth

+4

Tôi khá chắc chắn rằng anh ấy đã biết tất cả điều này - và đó không phải là những gì anh ta hỏi. –

2

Để tham khảo trong tương lai, Google đã thêm hỗ trợ tải lên tệp lớn (tối đa 50 MB): Tính năng mới được phát hành như một phần của và được thảo luận here.

+1

[Liên kết đó] (http://code.google.com/appengine/docs/python/blobstore/overview.html#Quotas_and_Limits) nêu rõ * kích thước đối tượng tối đa: 2 gigabyte *. Tôi không biết khi nào nó thay đổi, nhưng nó vẫn là tin tốt :) – voyager

1

Câu trả lời của Thomas L Holaday là câu trả lời đúng, tôi cho là vậy.Dù sao, chỉ trong trường hợp, đây là một liên kết đến Amazon Web Services SDK cho Máy ứng dụng (Java), mà bạn có thể sử dụng, ví dụ: để tải tệp từ App Engine lên Amazon S3. (Edit: Oh, chỉ cần chú ý - trừ S3) http://apetresc.wordpress.com/2010/06/22/introducing-the-gae-aws-sdk-for-java/

Viết bởi Adrian Petrescu. Từ trang web của mình:

[Đó là] một phiên bản của Amazon Web Services SDK cho Java sẽ chạy từ bên của Google App Engine. Điều này sẽ không công việc nếu bạn chỉ đơn giản bao gồm các JAR rằng AWS cung cấp trực tiếp vào WAR GAME, bởi vì mô hình bảo mật GAE của không cho phép Commons Apache HTTP khách hàng để tạo ra các ổ cắm và nguyên thủy mạng ở mức độ thấp nó yêu cầu thiết lập kết nối HTTP ; thay vào đó, Google yêu cầu bạn để thực hiện tất cả các kết nối thông qua tiện ích URLFetch của nó

+0

Cảm ơn bạn đã hét lên;) –

+0

Ngoài ra, tôi nên lưu ý, rằng có một cơ hội tốt nó sẽ làm việc với S3 là tốt. Hãy thử chỉ bằng cách xóa bộ lọc khỏi tệp build.xml và thử nghiệm nó. Tôi muốn tò mò kết quả là gì. –

Các vấn đề liên quan