0

我正在嘗試使用Facebook營銷API SDK將圖片上傳到Facebook。通過Facebook上的營銷API通過瀏覽器上傳圖片

這是sdk

我希望用戶能夠點擊選擇從瀏覽器中的文件,並通過運行Rails和SDK中的上傳。

基本上,這是我想要做的流程。

  1. 用戶選擇文件
  2. 鍵上傳
  3. 後端控制器處理該請求,並上傳到經由API使用Facebook。

但是,我遇到的問題是,出於安全原因,瀏覽器無法訪問Facebook SDK要求的文件路徑。

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

如果我使用內置到Rails或carrierwave ActionDispatch::Http::FileUpload,我得到訪問tempfile,其具有類似於RackMultipart20170803-89798-1e9hr

的名稱。如果我試圖將其上傳到Facebook,我得到一個錯誤說

API不接受這種類型的文件

沒有人有我什麼是最好的選擇是什麼?我能想到的唯一事情就是將文件上傳到像cloudinary這樣的主機,然後從中獲取URL並通過cloudinary的URL進行上傳。

回答

0

我找到的解決方案是在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 
1

你是對的,你的案例可能的解決方案是使用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方法時以編程方式完成,也可以使用位於Rails項目的config目錄下的cloudinary.yml配置文件進行全局設置。

下面是一個cloudinary的例子。YML文件:

生產: cloud_name: 「樣品」 API_KEY: 「874837483274837」 api_secret: 「a676b67565c6767a6767d6767f676fe1」

直接從瀏覽器上傳使用Cloudinary的jQuery插件完成

http://cloudinary.com/documentation/jquery_integration

爲確保所有上傳都是由您的應用程序授權的,必須首先在您的服務器端Rails代碼中生成一個安全簽名。

完全披露:我在Cloudinary擔任軟件工程師。