gpt4 book ai didi

ruby-on-rails - Ruby on Rails - OAuth 2 多部分发布(上传到 Facebook 或 Soundcloud)

转载 作者:行者123 更新时间:2023-11-30 05:28:48 26 4
gpt4 key购买 nike

我正在开发一个 Rails 应用程序,它使用 OmniAuth 为我的用户收集 Oauth/OAuth2 凭据,然后代表他们发布到这些服务。

创建简单的帖子来更新状态提要非常有效。现在我到了需要上传文件的地步。 Facebook 说“要发布照片,请发出 POST 请求,其中照片文件附件为 multipart/form-data。” http://developers.facebook.com/docs/reference/api/photo/

这就是我想要做的:

我在这里实现了这个模块:Ruby: How to post a file via HTTP as multipart/form-data?获取标题和数据...

if appearance.post.post_attachment_content_type.to_s.include?('image')

fbpost = "https://graph.facebook.com/me/photos"

data, headers = Multipart::Post.prepare_query("title" => appearance.post.post_attachment_file_name , "document" => File.read(appearance.post.post_attachment.path))

paramsarray = {:source=>data, :message=> appearance.post.content}
response = access_token.request(:post, fbpost, paramsarray, headers)
appearance.result = response
appearance.save
end

我收到了 OAuth2::HTTPError - HTTP 400 错误

任何帮助都将是不可思议的...据我所知,将文件上传到 SoundCloud 也需要此信息。

谢谢,

标记

最佳答案

我自己也为此苦苦挣扎。 oauth2 库由 Faraday 支持,因为它的 HTTP 交互。通过一些配置,它支持开箱即用的上传文件。第一步是在建立连接时添加适当的 Faraday 中间件。我的代码中的一个示例:

OAuth2::Client.new client_id, secret, site: site do |stack|
stack.request :multipart
stack.request :url_encoded
stack.adapter Faraday.default_adapter
end

这为法拉第连接添加了多部分编码支持。接下来,在对您的访问 token 对象发出请求时,您要使用 Faraday::UploadIO 对象。所以:

upload = Faraday::UploadIO.new io, mime_type, filename
access_token.post('some/url', params: {url: 'params'}, body: {file: upload})

在上面的代码中:

io - 您要上传的文件的 IO 对象。可以是一个 File 对象,甚至是一个 StringIO。

mime_type - 您正在上传的文件的 mime 类型。您可以尝试检测此服务器端,或者如果用户将文件上传给您,您应该能够从他们的请求中提取 mime 类型。

文件名 - 正在调用您正在上传的文件的名称。这也可以由您自己选择确定,或者您可以只使用上传文件的用户调用的任何内容。

some/url - 将其替换为您要发布到的 URL

{url: 'params'} - 将此替换为您要提供的任何 URL 参数

{file: upload} - 将其替换为您的多部分表单数据。显然,一个(或多个)键/值对应该包含您的文件上传实例。

关于ruby-on-rails - Ruby on Rails - OAuth 2 多部分发布(上传到 Facebook 或 Soundcloud),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5680286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com