如何通过 JSON API 通过 Carrierwave 上传文件?

Posted

技术标签:

【中文标题】如何通过 JSON API 通过 Carrierwave 上传文件?【英文标题】:How do I upload a file via Carrierwave over a JSON API? 【发布时间】:2012-06-15 21:55:18 【问题描述】:

我正在 Rails 中构建文件操作 API,我需要能够通过单独的 gem 访问它。该 API 使用 Carrierwave,并且该部分可以毫无问题地工作。我不明白该怎么做是获取任意文件并将其从 gem 接口传递给 API。

Carrierwave 将其文件作为File.open('foo.jpg') 的结果或作为来自文件字段的POST。不过,我真的不确定两者都在做什么来序列化文件并将其发送。

如何获取文件的内容并将其转换为可以通过 JSON 传递和发布的内容?

【问题讨论】:

你的意思是 API 接收的东西是 JSON 而不是表单参数? 没错。 API 将以 JSON 格式接收内容,因为它旨在支持命令行界面而不是基于浏览器的界面。 【参考方案1】:

html 表单 POST 文件时,实际发生的是 HTTP 的一个特殊部分,称为多部分请求。实际上,文件被“附加”到请求中。

您使用什么库将 JSON 发布到您的 api 将回答这个问题。将文件附加到请求应该相当普遍,但并非所有库都支持它。

This stack overflow article seems to give some good indications of how to do it.

【讨论】:

这是完成我想要完成的事情的好方法。听起来最初的问题是从一个不好的前提开始的——文件根本不会被序列化为 JSON 对象,而是位于协议的完全不同的部分。无论如何,这个库让我有了一个很好的开始,如果我想知道它是如何做到的,我总是可以找到它的源代码。谢谢! 没错。值得注意的是,您可以使用 base64 编码或其他一些 ASCII 编码在 JSON 中嵌入文件,但是除非您真的需要,否则我不推荐该路径。

以上是关于如何通过 JSON API 通过 Carrierwave 上传文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Chainlink api 调用通过 api 从 json 返回中检索字符串值

如何通过 cURL/PHP 使用 PUT 方法将 JSON 数据发送到 API

如何通过 Protractor 使用 vanilla JS 从 API 获取 json

如何通过 JSON 向服务器发送 API 请求?不断收到 CORS 错误

我应该如何通过 JSON 在 Rails/iOS 之间设置一个简单的 API?

如何通过 JSON API 实现复杂的条件批量部分更新?