问题描述
我正在尝试使用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