通过浏览器通过 facebook marketing api 上传图片

Upload Image via facebook marketing api through browser

我正在尝试使用 Facebook 营销 API SDK 将图像上传到 Facebook。

这是sdk

我希望用户能够从浏览器单击 select 文件,并通过 Rails 和 SDK 运行 上传。

基本上,这是我尝试执行的流程。

  1. 用户select文件
  2. 点击上传
  3. 后端控制器处理请求并通过API上传到facebook。

但是,我 运行 遇到的问题是,出于安全原因,浏览器无法访问 Facebook SDK 要求的文件路径。

ad_account.adimages.create({
  'logo1.png' => File.open('./assets/logo1.jpg')
}) 

如果我使用 Rails 或载波中内置的 ActionDispatch::Http::FileUpload,我可以访问 tempfile,它的名称类似于 RackMultipart20170803-89798-1e9hr

如果我尝试将其上传到 Facebook,我会收到一条错误消息

API does not accept files of this type

有人知道最好的选择是什么吗?我唯一能想到的就是将文件上传到像 cloudinary 这样的主机,然后从那里获取 url 并通过 url 从 cloudinary 上传。

我找到的解决方案是在 public 文件夹中创建上传文件的副本,然后从那里处理。

uploaded_file = params["file"]
file_name = uploaded_file.original_filename
file_path = File.expand_path(uploaded_file.tempfile.path)
file = File.open("#{FILE_PATH}/#{file_name}", "wb")

file.write uploaded_file.tempfile.read
file.close

你是对的,一个可能的解决方案是使用 Cloudinary。

Cloudinary 的 Ruby 集成库可作为开源 Ruby GEM.

要安装 Cloudinary Ruby GEM, 运行:

gem install cloudinary

如果您使用 Rails 3.x 或更高版本,请编辑您的 Gemfile,添加以下行和 运行 包。

gem 'cloudinary'

您的 cloud_name 帐户参数是为您的媒体资产构建 URL 所必需的。还需要 api_key 和 api_secret 来执行对 Cloudinary 的安全 API 调用。

设置配置参数可以在每次调用 Cloudinary 方法时以编程方式完成,也可以使用 cloudinary.yml 配置文件全局完成,该文件位于 Rails 项目的配置目录下。

这是一个 cloudinary.yml 文件的示例:

制作: cloud_name: "sample" api_key:“874837483274837” api_secret: "a676b67565c6767a6767d6767f676fe1"

直接从浏览器上传是使用 Cloudinary 的 jQuery 插件完成的

http://cloudinary.com/documentation/jquery_integration

为确保您的应用程序授权所有上传,必须首先在您的服务器端 Rails 代码中生成安全签名。

完全披露:我在 Cloudinary 担任软件工程师。