将文件从 ActiveStorage 上传到 API
Upload a file from ActiveStorage to an 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 ("\xC4" from ASCII-8BIT to UTF-8)
如果我不调用 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
我正在尝试使用 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 ("\xC4" from ASCII-8BIT to UTF-8)
如果我不调用 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