【发布时间】:2016-08-23 10:28:30
【问题描述】:
我正在使用 Electron 构建一个桌面应用程序,它基本上是 JavaScript。
在其中,我将这样的图像发送到我的 Rails API:
var myHeaders = new Headers();
myHeaders.append('Authorization', 'Token token=redacted');
myHeaders.append('Content-Type', 'application/json');
myHeaders.append('Accept', 'application/json');
...
var formData = new FormData();
formData.append("img", base64EncodedImage);
var myPost = {method: 'POST', headers: myHeaders, body: formData}
fetch("url", myPost)
(简体)
在我的 Rails 控制台中,我看到:
{"REMOTE_ADDR"=>"127.0.0.1", "REQUEST_METHOD"=>"POST", "REQUEST_PATH"=>"/task/screenshot", "PATH_INFO"=>"/task/screenshot", "REQUEST_URI"=>"/task/screenshot", "SERVER_PROTOCOL"=>"HTTP/1.1", "HTTP_VERSION"=>"HTTP/1.1", "HTTP_HOST"=>"localhost:3000", "HTTP_CONNECTION"=>"keep-alive", "CONTENT_LENGTH"=>"454856", "HTTP_ACCEPT"=>"application/json", "HTTP_ORIGIN"=>"null", "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) testivate-research-gigs/1.0.0 Chrome/49.0.2623.75 Electron/0.37.5 Safari/537.36", "HTTP_AUTHORIZATION"=>"Token token=redacted", "CONTENT_TYPE"=>"application/json", "HTTP_ACCEPT_ENCODING"=>"gzip, deflate", "HTTP_ACCEPT_LANGUAGE"=>"en-US", "rack.url_scheme"=>"http", "SERVER_NAME"=>"localhost", "SERVER_PORT"=>"3000", "QUERY_STRING"=>"", "rack.tempfiles"=>[#<Unicorn::TmpIO:/var/folders/k9/vnpft_6d7qs6xmdb9_4svvmw0000gn/T/0.19309304750270062>], "rack.input"=>#<Rack::Lint::InputWrapper:0x007fe1de317000 @input=#<Unicorn::TeeInput:0x007fe1de31d950 @len=454856, @chunked=false, @socket=#<Kgio::Socket:fd 7>, @parser=#<Unicorn::HttpParser:0x007fe1db08ce00>, @buf="", @rbuf="------WebKitFormBoundaryxkkhvE17qoI5ozlK\r\nContent-Disposition: form-data; name=\"img\"\r\n\r\ndata:image/jpeg;base64,iVBORw0KGgoAAAANSUhEU...
但我无法获取图像。这是我使用 Pry 进入控制器时看到的:
> request.body.read
> request.body.rewind
> request.body.read
> request.env
也就是说,我对大多数命令都收到了空响应,然后在我输入request.env 后它就无限期地挂在那里,没有返回到提示符。
如何获取图片?
谢谢。
顺便说一句,其他接收 POST 但没有嵌入图像的操作运行良好。以前,当我使用 XMLHttpRequest() 而不是 fetch() 时,此操作也可以完美运行,但我必须进行切换以将我的 Google Chrome 扩展程序转换为 Electron 应用程序。
更新
我通过将图像直接上传到 S3 而不是 S3-via-Rails 为自己解决了这个问题。它不仅有效,而且比通过应用程序更快,我现在只需要告诉在哪里查找图像即可。但鉴于我最初的问题没有得到解决,我将留下这个问题和悬赏。也许有人会解决它,获得赏金,并写下一个其他人会发现有用的答案。
【问题讨论】:
-
如何在 Rails 中存储图像,使用任何 gem 吗?
-
使用回形针 gem 上传图片stackoverflow.com/questions/35765578/…
-
好像把参数过滤掉了。
-
嗨@joewoodward——这就是为什么我开始展示
request.body.read(未过滤)本身是空的。 -
嗨@7urkm3n——我正在使用CarrierWave。但那一步是稍后的。由于这是从桌面应用程序上传的,而不是从我自己的网络应用程序上传的,所以我不能依赖 CarrierWave 或 Paperclip 来处理这个初始步骤。
标签: javascript ruby-on-rails post mime electron