Im使用unirest在Node JS中創建客戶端API,該API將向Rails API發送數據。我必須將文件變成編碼字符串這樣的base64:Rails API carrierwave無法上傳從API客戶端發送的文件
unirest.post('http://localhost:3000/api/v1/image_uploaders')
.headers({'Content-Type': 'multipart/form-data'})
.field({
"product_id": 12,
"variant_id": 1,
"image": fs.readFileSync(path).toString('base64')
}) // Form field
.end(function (response) {
console.log(response.body);
});
在Rails的側面這就是處理請求:
def create
variant = Variant.where(id: params[:variant_id]).first
if variant
product_image = ProductImage.new
product_image.image = StringIO.new(Base64.decode64(params[:image]))
product_image.product_id = params[:product_id]
product_image.variant_id = params[:variant_id]
if product_image.save
render json: true, status: :ok
else
render json: false, status: :bad_request
end
else
render json: false, status: :bad_request
end
end
我沒有得到文件上傳。任何想法?謝謝。
UPDATE
我得到這個錯誤信息:
undefined method `unpack'
for #<ActionDispatch::Http::UploadedFile:0x007fe47ac26f80>
這點這一行:
product_image.image = StringIO.new(Base64.decode64(params[:image]))
當您嘗試保存數據庫時顯示日誌。 – MC2DX
@MateuszCzerwiński請參閱我更新的問題 – kmp4hj
嘗試不使用'Base64.decode64',也許可以將數據存儲爲base64(?)。 – MC2DX