将文件从ActiveStorage上载到API

问题描述

我正在尝试使用Httparty gem将文件上传到API。 这是此api文档中要求的格式:

Method: POST
Content-Type: application/json   
{
  "name": "filename.png","type": 2,"buffer": "iVBOR..."
}

我的文档存储在ActiveStorage中,这是我下载文件生成参数HASH的功能

def document_params
  {
    "name": @document.file.filename.to_s,"type": IDENTIFIERS[@document.document_type],"buffer": @document.file.download
  }
end

然后我使用此功能发送数据:

HTTParty.post(
  url,headers: request_headers,body: document_params.to_json
)

问题是,当我执行document_params.to_json时,出现此错误

UndefinedConversionError(从ASCII-8BIT到UTF-8的“ \ xC4”)

如果我不调用to_json,数据将不会作为有效的json发送,而是以如下所示的哈希表示形式发送:{:key=>"value"}

我只想将文件数据作为二进制数据发送,而不尝试将其转换为UTF-8。

解决方法

我找到了一个解决方案:将文件内容编码为Base64:

def document_params
  {
    "name": @document.file.filename.to_s,"type": IDENTIFIERS[@document.document_type],"buffer": Base64.encode64(@document.file.download)
  }
end

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...