Вот например у меня есть выгрузка фото, и serv1 и serv2, я хочу чтобы фото загруженное на serv1 попадало на serv2, но serv1 и serv2 это разные хостинги Возможно?
Итак. Задача проста: на нашем сервере очень мало места и мы не хотим забивать его пользовательскими изображениями, вместо этого загружая их на некий сторонний сервис, который вернет нам ссылку, изображение по которой будет вставлено в пост пользователя. В качестве этого сервиса вполне неплохо подходит Imgur (http://imgur.com), который имеет достаточно неплохое API (http://api.imgur.com/resources_anon), единственное формальное ограничение которого - не более 50 загружаемых изображений в час, что, в общем-то не сильно большая беда для нашего очень небольшого сервиса.
Создаём формочку:
<?
<div id=\"dialog-img\" title=\"Upload\">
<%= form_tag(\"http://api.imgur.com/2/upload.json\", :method => \"post\", :multipart => true, :id => \"form_image\" do %>
<%= hidden_field_tag(:key, \"IMGUR_API_KEY\" %>
<%= file_field_tag \'image\' %>
<% end %>
</div>
?>
Эть у нас достаточно специфичная Rails-формочка, которая в общем-то достаточно интуитивна для того, чтобы переписать её в виде голого HTML для тех, кто использует другие фреймворки и языки.
Здесь нужно лишь вставить ключ API сервиса Imgur, который легко получается тут - https://imgur.com/register/api_anon
Теперь небольшой финт - так как мы хотим вставлять изображение в редактируемые пост пользователя \"на лету\", то нам нужно отправлять эту форму при помощи Ajax и отображать в виде всплывающего диалога. Первое легко делается при помощи плагина jQuery Form Plugin (http://www.malsup.com/jquery/form/), а второе - при помощи jQuery UI Dialogs (http://jqueryui.com/dialog/). После подключения на страницу данных плагинов, пишем в наш CoffeeScript-код примерно следующее:
<?
$(\"#dialog-img\".dialog
resizable: false,
height: 180,
width: 400,
modal: true,
autoOpen: false,
buttons:
\"Загрузить\": ->
if $(\"#image\".val()
options = { success: window.imageResponse }
$(\"#form_image\".ajaxSubmit(options)
$(\"#imgur_loading\".show()
$(this).dialog(\"close\"
\"Отмена\": ->
$(this).dialog(\"close\"
?>
Тем самым мы даём знать, что #dialog-img представляет из себя jQuery UI Dialog и что отправка формы осуществляется при помощи ajaxSubmit, а при удачном получении данных от сервера будет вызвана функция window.imageResponse, которая выглядит как-то так:
<?
window.imageResponse = (responseText, statusText, xhr, $form) ->
$(\"#post\".val($(\"#post\".val() + \" ![Image](\" + responseText.upload.links.original + \"\"
?>
Здесь мы просто вставляем ссылку на изображение в наш редактирующийся пост (в виде Markdown-разметки, но это здесь не суть - главное, что в responseText.upload.links.original содержится ссылка на наше изображение на сервере Imgur). А вот здесь, собственно, описание ответа, который возвращает Imgur - http://api.imgur.com/responses/#structure
Как видите, очень просто, но на выходе - очень красиво и удобно для пользователя.
Тема закрыта для обсуждения!