2012-07-09 36 views
8

Tôi đã thực hiện một số apis trong djangorestframework. Điều này tôi có thể kiểm tra cả hai với dạng html của api như với curl trong dòng lệnh.tải hình ảnh lên hình ảnh với djangorestframework bằng cách sử dụng json và kiểm tra điều này với CURL

Bây giờ tôi có một api cho một mô hình với một trong những lĩnh vực một ImageField.

Tôi không thể tìm ra lệnh curl nào sẽ sử dụng. Sử dụng cú pháp tôi sử dụng trước đó để chơi bóng bài hành động ở định dạng json, nó sẽ là:

curl -X POST -S -H 'Content-Type: application/json' -u "username:password" --data-binary '{"otherfields":"something", "photo":"/home/michel/test.jpg"}' 127.0.0.1:8000/api/v1/ 

nhưng trong trường hợp này ảnh sẽ không được lưu lại và bỏ trống (ảnh là một lĩnh vực không bắt buộc)

thêm -T /home/michel/test.jpg Tôi nhận được thông báo lỗi cho biết 127.0.0.1:800/api/v1/test.jpg không tồn tại dưới dạng url.

Trong dạng thử nghiệm html của djangorestframework, tất cả đều hoạt động tốt.

Sử dụng tùy chọn -F, nó nói tôi chỉ có thể làm 1 yêu cầu tại một thời điểm ... Tôi cũng loại bỏ các kiểu dữ liệu từ dữ liệu nhị phân

Ai có thể giúp tôi làm thế nào để làm cho bài curl này với cả hình ảnh và dữ liệu khác trong json trong 1 lệnh.

Trả lời

11

Sau một câu đố dài, điều này dường như làm các trick:

  • đặt tất cả các đối json theo -F lập luận riêng
  • chỉ sử dụng tiêu đề Accept (không Content-Type)
  • Và xác định loại hình ảnh
  • Sử dụng @ để cho biết tệp cục bộ để tải lên

    curl -X POST -S \ 
        -H 'Accept: application/json' \ 
        -u "username:password" \ 
        -F "otherfields=something" \ 
        -F "[email protected]/home/michel/test.jpg;type=image/jpg" \ 
        http://127.0.0.1:8000/api/v1/ 
    

Bằng cách này, tôi biết tất cả điều này là trên trang web tài liệu uốn cong, nhưng chỉ bỏ lỡ một ví dụ về tất cả những thứ này với nhau vì có nhiều tùy chọn để thử.

+1

Tôi đang làm gì sai? '$ curl -X POST -S -H" Chấp nhận-Ngôn ngữ: en-en "-H 'Chấp nhận: application/json' \ -F" name = Avatar "\ -F" username = avatar "\ -F "password = A1234567" \ -F "[email protected]" \ -F "mã thông báo = 748e14e32ce165d06365d3c9a00cee3f" \ -F "avatar = @/home/moreno/Pictures/avatar004.jpg; type = image/jpg "127.0.0.1: 8000/api/v1/người dùng/đăng ký /' phản hồi 400 '{" tên người dùng ": [" Trường này là bắt buộc. "]," mật khẩu ": [" Trường này là bắt buộc. "]," name ": [" Trường này là bắt buộc. "]," hình đại diện ": [" Không có tệp nào được gửi. "]," email ": [" Trường này là bắt buộc. "]}' – Moreno

+0

nó thiếu một trong số các yêu cầu lĩnh vực. Bạn cần phải sử dụng -u trước tên người dùng, không phải -F (trừ khi nó cũng là một trường trong api, hơn bạn cần sử dụng cả hai) –

+0

@ michel-iamit thanks. Tôi quyết định gửi hình ảnh dưới dạng trường base64 ví dụ: "curl -H" Ủy quyền: JWT ey ... 5U "-d" name = Tên người dùng&username=user&[email protected]&password=A1234567 "--data-urlencode ' avatar = '"$ (base64 ~/Hình/avatar004.jpg)"' '--data-urlencode' image = '"$ (base64 ~/Hình/avatar001.jpg)"' '--data-urlencode' picture = '' $ (base64 ~/Pictures/577383.jpg) "'' http: // localhost: 8000/api/v1 // đăng ký /' – Moreno

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