Tôi có một lối vào REST được viết bằng Python/Chai xử lý các tệp tải lên, thường là tệp tải lên lớn. API là wirtten theo cách mà:Tải lên tệp trực tuyến bằng cách sử dụng chai (hoặc bình hoặc tương tự)
Máy khách gửi PUT với tệp dưới dạng tải trọng. Trong số những thứ khác, nó sẽ gửi các tiêu đề Date và Authorization. Đây là biện pháp bảo mật chống lại các cuộc tấn công phát lại - yêu cầu được ghi bằng một khóa tạm thời, sử dụng url mục tiêu, ngày và một số thứ khác
Bây giờ là vấn đề. Máy chủ chấp nhận yêu cầu nếu ngày được cung cấp nằm trong cửa sổ ngày giờ đã cho trong 15 phút. Nếu quá trình tải lên mất nhiều thời gian, thời gian tải lên sẽ dài hơn đồng bằng thời gian cho phép. Bây giờ, việc xử lý ủy quyền yêu cầu được thực hiện bằng cách sử dụng trang trí trên phương thức xem chai. Tuy nhiên, chai sẽ không bắt đầu quá trình gửi trừ khi quá trình tải lên hoàn tất, do đó việc xác thực không thành công khi tải lên lâu hơn.
Câu hỏi của tôi là: có cách nào giải thích cho chai hoặc WSGI xử lý yêu cầu ngay lập tức và truyền trực tuyến tải lên khi nó đi không? Điều này cũng hữu ích cho tôi vì những lý do khác. Hoặc bất kỳ giải pháp nào khác? Khi tôi viết bài này, phần mềm trung gian của WSGI xuất hiện trong đầu, nhưng tôi vẫn muốn hiểu rõ hơn về bên ngoài.
Tôi sẵn sàng chuyển sang Flask hoặc thậm chí các khung công tác Python khác, vì lối vào REST khá nhẹ.
Cảm ơn bạn
Tôi sẽ thêm điều đó vào một số hệ điều hành (trong trường hợp của tôi là Ubuntu 14.10), nếu bạn mở (tên tệp 'a'), thì tìm kiếm() sẽ không di chuyển con trỏ của bạn. Việc bổ sung sẽ được thực thi và bạn sẽ luôn đính kèm đoạn thư đến vào cuối tệp. – Drachenfels
@ petrus-jvrensburg Câu trả lời của bạn là rất tốt cho nhu cầu của tôi, nhưng tôi tự hỏi, làm thế nào Flask có thể không trộn yêu cầu trong trường hợp hai người dùng tải lên cùng một tên tập tin cùng một lúc?Bạn có phải thực hiện một cơ chế phiên để xác định hai người dùng hoặc có một số thuộc tính http/nginx/uwsgi/flask cơ bản có ánh xạ chính xác yêu cầu đến cùng một phương thức gọi không? Cảm ơn sự giúp đỡ của bạn! –
@CyrilN. Đã không nghĩ về điều đó. Nhưng nếu bạn đã thiết lập một số xác thực cho ứng dụng của mình thì hãy sử dụng. Nếu không, bạn có thể thẩm vấn 'request.remote_addr' và 'request.user_agent' để phân biệt giữa những người dùng đồng thời. –