【问题标题】:Ruby: Temporarily store remote fileRuby:临时存储远程文件
【发布时间】:2018-03-17 20:41:27
【问题描述】:

我正在尝试将文件发布到我使用 CarrierWave 远程存储的 API。

使用CarrierWave尚未上传的本地文件效果很好:

JSON.parse(RestClient.post("https://build.phonegap.com/api/v1/keys/android", {
    keystore: File.new(Rails.root.join('file.keystore'))
}), symbolize_names: true)[:id]
=> 312199

这是我尝试在本地临时存储文件的方法:

response = HTTParty.get model.file.url
f = Tempfile.new SecureRandom.hex
f.binmode
f.write response.body
f.flush
f.close
JSON.parse(RestClient.post("https://build.phonegap.com/api/v1/keys/android", {
    keystore: File.new(f)
}), symbolize_names: true)[:id]
RestClient::BadRequest: 400 Bad Request

我检查了临时文件和file.keystore的内容是否相同。

我做错了什么?

【问题讨论】:

  • 我的猜测是 https://build.phonegap.com/api/v1/keys/android 期待一个名为 file.keystore 的文件名?如果文件内容相同,还能有什么解释?
  • 你是对的。这太明显了。谢谢!

标签: ruby-on-rails ruby file carrierwave temporary-files


【解决方案1】:

如果您的 api 依赖于 file.keystore 的文件名,但您不关心文件的持久化,为什么不写一个文件,发布它,然后删除该文件?

    response = HTTParty.get model.file.url
    file = File.open('file.keystore', 'w') do |f|
        f.binmode
        f.write response.body
    end

    JSON.parse(RestClient.post("https://build.phonegap.com/api/v1/keys/android", {
        keystore: 'file.keystore' 
    }), symbolize_names: true)[:id]

    File.delete('file.keystore')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    相关资源
    最近更新 更多