2012-06-12 24 views
7

Tôi đang xây dựng API xử lý tệp trong Rails và tôi cần có thể truy cập nó qua một gem riêng biệt. API sử dụng Carrierwave và phần đó hoạt động không có vấn đề gì. Những gì tôi không hiểu làm thế nào để làm là để có một tập tin tùy ý và cung cấp nó cho API từ giao diện đá quý.Làm cách nào để tải lên tệp qua Carrierwave qua API JSON?

Carrierwave lấy các tệp của mình dưới dạng kết quả của File.open('foo.jpg') hoặc dưới dạng POST từ một trường tệp. Tôi thực sự không chắc chắn những gì hoặc là làm, mặc dù, để serialize các tập tin và gửi nó cùng.

Làm cách nào để lấy nội dung của tệp và biến nội dung đó thành thứ tôi có thể chuyển qua và đăng qua JSON?

+0

Bạn có nghĩa là API nhận nội dung dưới dạng JSON thay vì thông số biểu mẫu không? –

+0

Đúng vậy. API sẽ nhận mọi thứ trong JSON, vì nó có nghĩa là hỗ trợ giao diện dòng lệnh thay vì giao diện dựa trên trình duyệt. –

Trả lời

4

Khi một biểu mẫu HTML POST một tệp, điều thực sự xảy ra là một phần đặc biệt của HTTP được gọi là yêu cầu nhiều phần. Có hiệu quả, tệp được "đính kèm" vào yêu cầu.

Câu hỏi sẽ được trả lời bằng thư viện bạn đang sử dụng để POST JSON lên api của bạn. Việc đính kèm tệp vào yêu cầu phải khá phổ biến nhưng không phải tất cả các thư viện đều có thể hỗ trợ nó.

This stack overflow article seems to give some good indications of how to do it.

+0

Đây là một cách tuyệt vời để hoàn thành những điều tôi đã cố gắng hoàn thành. Có vẻ như câu hỏi ban đầu bắt đầu với một tiền đề xấu - một tập tin sẽ không được tuần tự hóa thành một đối tượng JSON, nhưng sẽ đi theo một phần hoàn toàn khác của giao thức. Trong mọi trường hợp, thư viện này giúp tôi có một khởi đầu tuyệt vời, và nếu tôi tự hỏi làm thế nào nó làm những gì nó làm tôi luôn có thể nhấn mã nguồn của điều đó. Cảm ơn! –

+0

Chính xác. Đáng chú ý, bạn có thể nhúng một tệp trong JSON bằng cách sử dụng mã hóa base64 hoặc một số mã hóa ASCII khác, tuy nhiên tôi sẽ không đề xuất đường dẫn đó trừ khi bạn thực sự cần nó. –

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