Gem grape 写 api 发送文件

yakjuly · 2012年02月09日 · 最后由 yakjuly 回复于 2016年06月15日 · 5599 次阅读

最近在项目中需要提供接口给别的项目调用,就用 grape 来写 api。其中有一个需求是 对方系统发送给我一些参数 我产生一个文件 发还给对方。我看了下 grape 的介绍 发现没有 send_file 方法。

大家有什么方法吗?需要自定义一个返回结果吗?

我用

Rack::Response.new(File.read(path) , 200, { "Content-type" => "application/pdf" }).finish

报错 redundant UTF-8 sequence

@yakjuly 这个不知道是不是可以 send_file(file, :disposition => 'attachment', :filename => File.basename(file)

我已经放弃用 Grape 了,还是原生 Sinatra 用着放心

现在的方案是 Sinatra + Roar https://github.com/apotonick/roar

@allenwei Grape::Api 中没有 send_file 这个方法。也许可以用到 Rack::Sendfile,不过在开发阶段 我是用 mongrel 的 不方便测试 X-Direct 测试。我看看 roar 是什么东东

#2 楼 @yakjuly API 很少有直接传文件的吧 都是返回文件 URL 的...

@hooopo 主要是提供一种文件服务,现在把这个请求挪出来 用普通 controller 做了。API 确实不应该做这种事。

为什么不像淘宝接口一样,通过 api 请求产生一个文件,让对方去下载?

以前是不想把这个文件保存在本地,现在是改成给链接的方式提供给对方下载。

大神,关于这个问题最后怎么解决的?我是新手,也遇到了相同的需求,API 也是用的 Grape,APP 客户端想从服务器下载文件,目前没有找到好的方法,现在正准备 API 返回文件的 URL,让 APP 自己去下载

#7 楼 @lzding 目前是用 controller 返回文件了 没在 Grape 里做。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号