如何检索从桌面应用程序发送到Rails API的图像
How to retrieve an image sent from a desktop app to a Rails API
我正在使用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
后它只是无限期地挂在那里,而不会返回提示符。
如何获取图像?
谢谢。
顺便说一句,其他正在接收开机自检但不使用嵌入图像的操作工作正常。以前,当我使用XMLHttpRequest()
not fetch()
时,此操作也运行良好,但我不得不进行切换才能将我的谷歌浏览器扩展程序变成电子应用程序。
更新
我通过将图像直接上传到S3而不是S3-via-Rails为自己解决了这个问题。它不仅有效,而且比通过应用程序更快,我现在只需要告诉在哪里查找图像即可。但是,鉴于我最初的问题没有得到解决,我将这个问题和赏金悬而未决。也许有人会解决它,领取赏金,并写出一个其他人会发现有用的答案。
如果您使用 POST
正确发送图像并将其放在允许的参数上,它应该可以通过常规参数集合获得,那么您可以读取 base64 编码的图像并将其写出:
File.open('some/path/to/image.jpg', 'wb') do|f|
f.write(Base64.decode64(base_64_encoded_data))
end
你为什么要直接阅读request.body
? 控制器中的params
应具有表单数据中的值哈希。
我会通过从桌面应用程序向本地服务的 API 版本发送请求(即从终端运行 rails 服务器)来进行测试,并观察 rails 控制台以查看收到的内容。您应该会看到参数列表。如果请求中包含 img 参数,那么您可能通过 rails 控制器中的强参数将您列入黑名单
如果您没有看到 img 参数,则需要调整桌面应用程序以正确发送表单数据
另外,我怀疑您应该使用帖子而不是从桌面应用程序获取
- Rails:试图在javascript(Google Charts API)中嵌入一个adv-ruby(each+迭代器
- 如何检索从桌面应用程序发送到Rails API的图像
- Rails Google maps javascript api v3 setIcon() url 無法定位圖片
- angular js - 指定 Rails API 的主机名
- Angular ng-model 将数据作为数组发送到 rails-api
- 将Google Places API与Rails应用程序集成
- 谷歌图表API与Ruby on Rails
- Javascript 客户端框架与 Rails JSON API - 如何进行集成测试
- 用于 Rails JSON API 的有用 nodejs 库
- BackboneJS + Ruby on Rails (rails-api) 跨域问题
- Rails API-移动应用程序状态文本错误
- 使用rails-api、backbone.js和design进行身份验证的请求
- 覆盖骨干.同步Rails API认证与设计
- 用来自rails api的表单提交的新数据重新填充Angular应用的数据
- 如何使用Angular和Rails API实现通知——而不是使用轮询技术
- EmberJS Rails API security
- 使JS请求到我的Rails API
- 使基本的请求在JS我的Rails API从Chrome扩展
- rails API + Angular2前端+静态HTML主页
- 使用AJAX在Rails API上创建/保存用户