javascript - 如何检索从桌面应用程序发送到 Rails API 的图像

标签 javascript ruby-on-rails post mime electron

我正在使用 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 进入 Controller 时看到的:

> request.body.read
> request.body.rewind
> request.body.read
> request.env

也就是说,我对大多数命令都收到空响应,然后在我输入 request.env 后它就无限期地卡在那里。 , 而不返回提示。

如何获取图像?

谢谢。

顺便说一句,其他接收 POST 但不接收嵌入图像的操作运行良好。以前,当我使用 XMLHttpRequest() 时,此操作也能完美运行。不是fetch() ,但我不得不将我的 Google Chrome 扩展程序转换为 Electron 应用程序。

更新

我通过将图像直接上传到 S3 而不是通过 Rails 上传到 S3 来解决了这个问题。它不仅有效,而且比通过应用程序更快,我现在只需要告诉在哪里寻找图像。但由于我的原始问题没有得到解决,我将保留这个问题和赏金。也许有人会解决它,索取赏金,并写下其他人会发现有用的答案。

最佳答案

如果您使用 POST 正确发送图像并将它放在允许的参数上,它应该可以通过常规参数收集获得,然后您可以读取您的 base64 编码图像并将其写出:

File.open('some/path/to/image.jpg', 'wb') do|f|
  f.write(Base64.decode64(base_64_encoded_data))
end

你为什么要直接从 request.body 读取? Controller 中的 params 应该有来自表单数据的散列值。

关于javascript - 如何检索从桌面应用程序发送到 Rails API 的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36918373/

相关文章:

php - 无法从 codeigniter 中的 bootstrap-wysiwyg 文本编辑器发布值

javascript - 如何获得 translate3d 的绝对值?

javascript - 这个 iframe Buster 脚本看起来安全吗?

javascript - 我如何在 Vue.js 中声明响应式属性

ruby-on-rails - “此锁文件必须使用Bundler 2或更高版本。”即使安装了Bundler 2.0.2

ruby-on-rails - ActiveRecord - 获取某个位置的最后 20 条记录

ruby-on-rails - 在生产中访问 Rails 控制台

javascript - 为什么我的 jquery/ajax 帖子没有在我的 php 代码中注册?

javascript - Jquery Ajax Post 拒绝工作

javascript - 使用 Mustaches.js 在 CouchDB 中获取附件列表