2010-04-13 29 views
10

tôi bắt đầu sử dụng mô-đun upload nginx (mà tạo ra file upload như/tmp/000.121.545) nhưng tôi cần kẹp giấy để sử dụng tên tập tin gốc trong khi lưu các tập tin (như /public/avatars/LuckyLuke.jpg)từ đâu kẹp giấy có tên của tệp gốc?

trước đó trong các thông số Rails chỉ đang chuyển qua

"avatar"=>#<File:/tmp/RackMultipart20100413-6151-t3ecq0-0> 

không có tên tệp gốc, vì vậy tôi tự hỏi từ đâu nó đến trong kẹp giấy? tôi đã thử tìm kiếm thông qua mã plugin nhưng hiện tại nó hơi phức tạp đối với tôi.

Trả lời

19

Trình duyệt gửi tiêu đề http với tên tệp. ("Content-Disposition: filename = original_file.jpg")

Đường ray làm cho phương thức này có thể là đối tượng của đối tượng tệp tạm thời: params[:avatar].original_filename và kẹp giấy sử dụng.

Cụ thể, Rack phân tích biểu mẫu nhiều thành phần trong Rack :: Utils :: Multipart :: UploadedFile và đặt băm vào các tham số bao gồm :tempfile:filename. Sau đó, ActionDispatch :: Http :: Upload đi kèm và thay thế giá trị băm đó bằng đối tượng File (giá trị của: tempfile), mở rộng nó với mô-đun ActionDispatch :: Http :: UploadedFile, thêm một biến mẫu cho original_path và phương thức original_filename.

+0

Yap, đó là Content-Disposition: form-data; name = "files"; filename = "file1.txt" Từ: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2 –

+0

hm, tôi tin nó là như vậy, nhưng không thể tìm thấy bất kỳ dấu vết nào của "Nội dung-Bố trí" trong mã kẹp giấy trong khi grepping. –

+1

Ah, xin lỗi. Tôi thấy những gì bạn đang yêu cầu bây giờ. Tôi sẽ chỉnh sửa câu trả lời để bao gồm cách các tên miền nhận được tên tệp. – mckeed

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