Ich lade ein Bild mit Google Drive API und lade die Datei auf meine Rails API mit Paperclip.Python fragt POST-Image-Datei an Rails Paperclip, Rails: params ParseError
Ich habe das Google Drive-Image als BytesIO()
heruntergeladen und Kissen verwendet, um die Bytes in ein Bild mit dem Namen tmp.png
zu speichern/konvertieren. Ich verwende jetzt Anfragen, um meine Datei an Rails:
Die Medien/Büroklammer-Controller funktioniert; Es wurde mit Formular-Senden auf einer Knoten-Anwendung mit einer Datei-Dropzone getestet. Allerdings, wenn ich diesen Antrag stellen, mein localhost log ausspuckt:
Started POST "/media" for 172.18.0.1 at 2017-11-14 02:16:35 +0000
web_1 | Error occurred while parsing request parameters.
web_1 | Contents:
web_1 |
web_1 | media=attachment
web_1 |
web_1 | ActionDispatch::Http::Parameters::ParseError (822: unexpected token at 'media=attachment'):
web_1 |
web_1 | actionpack (5.1.2) lib/action_dispatch/http/parameters.rb:113:in `rescue in parse_formatted_parameters'
web_1 | actionpack (5.1.2) lib/action_dispatch/http/parameters.rb:107:in `parse_formatted_parameters'
web_1 | actionpack (5.1.2) lib/action_dispatch/http/request.rb:358:in `block in POST'
web_1 | rack (2.0.3) lib/rack/request.rb:57:in `fetch'
web_1 | rack (2.0.3) lib/rack/request.rb:57:in `fetch_header'
web_1 | actionpack (5.1.2) lib/action_dispatch/http/request.rb:357:in `POST'
web_1 | actionpack (5.1.2) lib/action_controller/metal/params_wrapper.rb:286:in `_wrapper_enabled?'
web_1 | actionpack (5.1.2) lib/action_controller/metal/params_wrapper.rb:235:in `process_action'
web_1 | activerecord (5.1.2) lib/active_record/railties/controller_runtime.rb:22:in `process_action'
web_1 | actionpack (5.1.2) lib/abstract_controller/base.rb:124:in `process'
web_1 | actionpack (5.1.2) lib/action_controller/metal.rb:189:in `dispatch'
web_1 | actionpack (5.1.2) lib/action_controller/metal.rb:253:in `dispatch'
web_1 | actionpack (5.1.2) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
web_1 | actionpack (5.1.2) lib/action_dispatch/routing/route_set.rb:31:in `serve'
web_1 | actionpack (5.1.2) lib/action_dispatch/journey/router.rb:46:in `block in serve'
web_1 | actionpack (5.1.2) lib/action_dispatch/journey/router.rb:33:in `each'
web_1 | actionpack (5.1.2) lib/action_dispatch/journey/router.rb:33:in `serve'
web_1 | actionpack (5.1.2) lib/action_dispatch/routing/route_set.rb:832:in `call'
web_1 | omniauth (1.6.1) lib/omniauth/strategy.rb:189:in `call!'
web_1 | omniauth (1.6.1) lib/omniauth/strategy.rb:167:in `call'
web_1 | omniauth (1.6.1) lib/omniauth/builder.rb:63:in `call'
web_1 | rack (2.0.3) lib/rack/session/abstract/id.rb:232:in `context'
web_1 | rack (2.0.3) lib/rack/session/abstract/id.rb:226:in `call'
web_1 | actionpack (5.1.2) lib/action_dispatch/middleware/cookies.rb:613:in `call'
web_1 | olive_branch (1.2.3) lib/olive_branch/middleware.rb:14:in `call'
web_1 | warden (1.2.7) lib/warden/manager.rb:36:in `block in call'
web_1 | warden (1.2.7) lib/warden/manager.rb:35:in `catch'
web_1 | warden (1.2.7) lib/warden/manager.rb:35:in `call'
web_1 | rack (2.0.3) lib/rack/etag.rb:25:in `call'
web_1 | rack (2.0.3) lib/rack/conditional_get.rb:38:in `call'
web_1 | rack (2.0.3) lib/rack/head.rb:12:in `call'
web_1 | activerecord (5.1.2) lib/active_record/migration.rb:556:in `call'
web_1 | actionpack (5.1.2) lib/action_dispatch/middleware/callbacks.rb:26:in `block in call'
web_1 | activesupport (5.1.2) lib/active_support/callbacks.rb:97:in `run_callbacks'
web_1 | actionpack (5.1.2) lib/action_dispatch/middleware/callbacks.rb:24:in `call'
web_1 | actionpack (5.1.2) lib/action_dispatch/middleware/executor.rb:12:in `call'
web_1 | actionpack (5.1.2) lib/action_dispatch/middleware/debug_exceptions.rb:59:in `call'
web_1 | actionpack (5.1.2) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
web_1 | railties (5.1.2) lib/rails/rack/logger.rb:36:in `call_app'
web_1 | railties (5.1.2) lib/rails/rack/logger.rb:24:in `block in call'
web_1 | activesupport (5.1.2) lib/active_support/tagged_logging.rb:69:in `block in tagged'
web_1 | activesupport (5.1.2) lib/active_support/tagged_logging.rb:26:in `tagged'
web_1 | activesupport (5.1.2) lib/active_support/tagged_logging.rb:69:in `tagged'
web_1 | railties (5.1.2) lib/rails/rack/logger.rb:24:in `call'
web_1 | actionpack (5.1.2) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
web_1 | actionpack (5.1.2) lib/action_dispatch/middleware/request_id.rb:25:in `call'
web_1 | rack (2.0.3) lib/rack/runtime.rb:22:in `call'
web_1 | activesupport (5.1.2) lib/active_support/cache/strategy/local_cache_middleware.rb:27:in `call'
web_1 | actionpack (5.1.2) lib/action_dispatch/middleware/executor.rb:12:in `call'
web_1 | actionpack (5.1.2) lib/action_dispatch/middleware/static.rb:125:in `call'
web_1 | rack (2.0.3) lib/rack/sendfile.rb:111:in `call'
web_1 | rack-cors (1.0.1) lib/rack/cors.rb:93:in `call'
web_1 | railties (5.1.2) lib/rails/engine.rb:522:in `call'
web_1 | puma (3.9.1) lib/puma/configuration.rb:224:in `call'
web_1 | puma (3.9.1) lib/puma/server.rb:602:in `handle_request'
web_1 | puma (3.9.1) lib/puma/server.rb:435:in `process_client'
web_1 | puma (3.9.1) lib/puma/server.rb:299:in `block in run'
web_1 | puma (3.9.1) lib/puma/thread_pool.rb:120:in `block in spawn_thread'
Mein Controller:
def create
@medium = Medium.new(medium_params)
if @medium.save
render json: @medium.to_json(
:only => [:id, :title, :caption],
:methods => [
:attachment_url,
:medium_attachment_url,
:thumb_attachment_url
]
), status: :created, location: @medium
else
render json: @medium.errors, status: :unprocessable_entity
end
end
...
def medium_params
params.require(:medium).permit(
# other irrelevant string/int permitted params
:attachment
)
end
Ich denke, dass vielleicht das Bild irgendwie anders in dieser Anfrage als wie eine Form codiert ist übermittelt die Daten. Aber ich bin leider sehr festgefahren.
Ich bin mir nicht sicher, ob dies das einzige Problem ist, aber Ich denke, dass Sie mit der Codierung auf dem richtigen Weg sein können - Siehe [Eine mehrteilig kodierte Datei veröffentlichen] (http://docs.python-requests.org/en/master/user/quickstart/#post-a-multipart- codierte Datei) beachten Sie, wie sich diese Methode von Ihrem Code unterscheidet. – sytech