PHP curlで、ファイルアップロードして、Ruby Sinatraで受け取る
PHPで動かしているプロジェクトから、 Sinatraで動かしているプロジェクトに画像を転送しないといけない事案が発生したので書いてみた。
PHPの送信側
<?php $path = "./images/hoge.png"; if(!file_exists($path)) { print "can't get image\n"; return false; } $url = "アップロード先IP"; $params = array('file'=>"@$path;type=image/png"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, TRUE ); curl_setopt($ch, CURLOPT_POSTFIELDS, $params ); curl_exec($ch); curl_close($ch); ?>
ポイント
①$params = array('file'=>"@$path;type=image/png");
MIME TYPEの設定は;type=〇〇で書く。
ファイルを指定するときはアットマークを最初に書かなければならない
Sinatoraで動かしているプロジェクトで画像を受け取る
main.rb
# -*- coding: utf-8 -*- require 'sinatra' require 'erb' #set :public_folder, File.dirname(__FILE__) + '/images/' class MainApp < Sinatra::Base # アップロード処理 post '/upload' do image_name ='' unless params[:file] halt 400, 'No file' end image_name = params[:file][:filename] save_path = './images/'+image_name begin File.open(save_path, 'wb') do |f| p params[:file][:tempfile] f.write params[:file][:tempfile].read end rescue #No image 404 halt 404, 'No file' end redirect image_name end end