【问题标题】:Upload file with api and carrierwave使用api和carrierwave上传文件
【发布时间】:2014-06-04 13:28:07
【问题描述】:

我正在为 web 服务编写 api,我需要为用户提供使用此 api 上传文件的能力。

对于我的上传,我使用的是carrierwave,但不确定如何将文件从api请求传递到carrierwave,以及文件应该如何从客户端计算机发送到服务器

【问题讨论】:

    标签: ruby-on-rails ruby api carrierwave


    【解决方案1】:

    基本上它基于 API 使用者使用的工具。如果 API 使用者使用 ruby​​,则可以通过传递 File 对象来使用它,或者使用 httmultiparty gem 我们可以上传文件。

    供您参考https://github.com/jwagener/httmultiparty。如果您需要更多帮助,请告诉我。

    【讨论】:

    • 那么,没有适合所有消费者的通用工具吗?
    【解决方案2】:

    通常我通过 REST API 实现文件上传,方法是允许客户端发送 PUT 请求,请求正文中包含文件的 base64 编码二进制数据。

    然后您可以将客户端请求路由到您的 CarrierWave 上传器,该上传器可以使用 FilelessIO.new(Base64.decode64(encoded_file)) 之类的方式解码请求正文中包含的二进制数据

    【讨论】:

    • 另外,看看这个:stackoverflow.com/questions/9854916/…
    • 如果我们不是在谈论图像文件,这是否仍然存在?说一个 pdf 或 .docx 文件。此类文件的 base64 编码是否仍然可行?
    • @Sebastialonso 是的,您应该也可以对 PDF 或 DOCX 文件进行 base64 处理
    【解决方案3】:

    试试RestClient。它用多部分表单数据等很酷的特性封装了 net/http:

    require 'rest_client'
    RestClient.post('http://localhost:3000/foo', 
      :name_of_file_param => File.new('/path/to/file'))
    

    它还支持流式传输。

    gem install rest-client 将帮助您入门。

    【讨论】:

      猜你喜欢
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 2015-12-05
      相关资源
      最近更新 更多