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

ste*_*ble 6 javascript post mime ruby-on-rails 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)
Run Code Online (Sandbox Code Playgroud)

(简化的)

在我的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
Run Code Online (Sandbox Code Playgroud)

也就是说,我收到大多数命令的空响应,然后它在我键入后无限期地挂起request.env,而不返回提示符.

我如何获得图像?

谢谢.

顺便说一下,接收POST而不是嵌入图像的其他操作正在完美运行.此前,这一行为可以正常使用过,我用的时候XMLHttpRequest()没有fetch(),但我不得不作出的开关,打开我的谷歌Chrome扩展到电子应用.

UPDATE

我通过将我的图像直接上传到S3而不是S3-via-Rails来解决这个问题.它不仅可以工作,而且比通过应用程序更快,我现在只需要知道在哪里寻找图像.但是看到我的原始问题没有得到解决,我将离开这个问题并且开启赏金.也许有人会解决它,获得赏金,然后写下别人会在赛道上发现有用的答案.

joe*_*ard 0

我将通过从桌面应用程序向本地提供的 API 版本发送请求(即从终端运行 Rails 服务器)进行测试,并观察 Rails 控制台以查看收到的内容。您应该看到参数列表。如果请求中包含 img 参数,那么您可能会通过 Rails 控制器中的强参数将其列入黑名单

如果您没有看到 img 参数,那么您需要调整桌面应用程序以正确发送表单数据

另外,我怀疑您应该使用帖子而不是从桌面应用程序获取