{"id":21923,"date":"2019-07-15T15:37:45","date_gmt":"2019-07-15T15:37:45","guid":{"rendered":"http:\/\/ftp_api_for_cloudinary_part_1_real_time_synchronization"},"modified":"2019-07-15T15:37:45","modified_gmt":"2019-07-15T15:37:45","slug":"ftp_api_for_cloudinary_part_1_real_time_synchronization","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization","title":{"rendered":"FTP API for Cloudinary: Real-Time Synchronization"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><h4>tl;dr Diagrams and blueprints for FTPing on Cloudinary<\/h4>\n<hr \/>\n<p>As a robust, effective solution for managing digital media, Cloudinary offers a RESTful API for provisioning and maintenance. That API enables numerous operations, from basic ones like image uploads to advanced ones, such as creation of named transformations and AI-based search.<\/p>\n<p>However, despite its versatility for programming languages and frameworks, RESTful API does <strong>not<\/strong> comply with File Transfer Protocol (FTP), which has been in use for 50 years. Not only are FTP clients user-friendly, they can also seamlessly upload, delete, or download files in bulk and synchronize with the file system in question, whether automated or otherwise.<\/p>\n<p>We\u2019ve created the \u2018FTP API for Cloudinary\u2019, which translates FTP API calls into Cloudinary RESTful API calls. The FTP API enables you to use standard FTP clients for managing media assets in your Cloudinary account. Using this FTP API, you can maintain work procedures that involve FTP transfers.<\/p>\n<p>For example, suppose you migrate to Cloudinary and your organization is engaged with photography agencies. The agencies are used to sending their photoshoot files to you over FTP. You could take advantage of the <strong>FTP API for Cloudinary<\/strong> to avoid changing a smoothly working process, enabling a seamless transparent migration to Cloudinary.<\/p>\n<p>This post demonstrates how to use FTP on Cloudinary through an example of real-time synchronization. A second example on bulk uploads will be the subject of part 2 of this series.<\/p>\n<div class='c-callout  c-callout--inline-title c-callout--note'><strong class='c-callout__title'>Note:<\/strong> <p>The <strong>FTP API for Cloudinary<\/strong> is based on the Amazon Web Services\u2019(AWS) Simple Storage Service (S3) and Python lambda. For the code in its entirety, see the <a href=\"https:\/\/github.com\/cloudinary-devs\/ftp2cld\">blueprint in the Github repository<\/a>.<\/p><\/div>\n<h2>The Process<\/h2>\n<p>The diagram below illustrates the process of a unidirectional synchronization of files to Cloudinary in real time with the FTP API.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-res.cloudinary.com\/image\/upload\/w_700,c_fill,f_auto,q_auto,dpr_2.0\/FTP-API-inner.png\" alt=\"Diagram\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1400\" height=\"598\"\/><\/p>\n<h3>Here\u2019s the step-by-step workflow:<\/h3>\n<ol>\n<li>The FTP source uploads a file to the user\u2019s S3 bucket.\nBe sure to set your bucket to accept Cloudinary\u2019s bucket <code>GetObject<\/code> requests and to send event notifications. For details, see the blueprint.<\/li>\n<li>S3 notifications are sent to an AWS Lambda.<\/li>\n<li>The AWS lambda function sends an API Upload request to Cloudinary.<\/li>\n<li>Cloudinary uploads the file from the user\u2019s S3 bucket.<\/li>\n<\/ol>\n<p>This process has the following advantages over Cloudinary <a href=\"https:\/\/cloudinary.com\/documentation\/fetch_remote_images#auto_upload_remote_resources\">automated uploads<\/a> because\u2014<\/p>\n<ul>\n<li>Your assets get automatically synchronized to your Cloudinary account without them needing to be accessed by a user (whereas Cloudinary auto-upload is triggered by an end-user request).<\/li>\n<li>If any eager transformation was defined on those uploaded assets, then your user will not have to wait for it.<\/li>\n<li>Cloudinary\u2019s powerful search engine is on, geared up to deliver complete results set to your search criteria.<\/li>\n<li>Newer versions of the same object are synchronized.<\/li>\n<li>Deleted and renamed objects are synchronized.<\/li>\n<li>The upload date is preserved.<\/li>\n<li>Optionally, you can set up synchronization of metadata and customize permissions and access control for the uploaded objects.<\/li>\n<\/ul>\n<h2>Conclusion<\/h2>\n<p>Cloudinary\u2019s native API deftly mimics FTP tasks, making this <strong>FTP API for Cloudinary possible<\/strong>. As a result, FTP users can continue enjoying the simple and smooth experience typical of classic FTP operations. At the same time, you and your organization can enjoy all the media management benefits of Cloudinary, with every FTP\u2019d file automatically synchronizing with your Cloudinary account. Do try it out!<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":21924,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-21923","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>FTP API for Cloudinary: Real-Time Synchronization<\/title>\n<meta name=\"description\" content=\"With Cloudinary FTP API, you can use standard FTP clients to manage media assets in your Cloudinary account and maintain procedures that involve FTP transfers\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"FTP API for Cloudinary: Real-Time Synchronization\" \/>\n<meta property=\"og:description\" content=\"With Cloudinary FTP API, you can use standard FTP clients to manage media assets in your Cloudinary account and maintain procedures that involve FTP transfers\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-15T15:37:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721107\/Web_Assets\/blog\/FTP-API\/FTP-API.jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"1540\" \/>\n\t<meta property=\"og:image:height\" content=\"847\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"FTP API for Cloudinary: Real-Time Synchronization\",\"datePublished\":\"2019-07-15T15:37:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization\"},\"wordCount\":6,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721107\/Web_Assets\/blog\/FTP-API\/FTP-API.jpg?_i=AA\",\"inLanguage\":\"en-US\",\"copyrightYear\":\"2019\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization\",\"url\":\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization\",\"name\":\"FTP API for Cloudinary: Real-Time Synchronization\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721107\/Web_Assets\/blog\/FTP-API\/FTP-API.jpg?_i=AA\",\"datePublished\":\"2019-07-15T15:37:45+00:00\",\"description\":\"With Cloudinary FTP API, you can use standard FTP clients to manage media assets in your Cloudinary account and maintain procedures that involve FTP transfers\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721107\/Web_Assets\/blog\/FTP-API\/FTP-API.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721107\/Web_Assets\/blog\/FTP-API\/FTP-API.jpg?_i=AA\",\"width\":1540,\"height\":847},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FTP API for Cloudinary: Real-Time Synchronization\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"FTP API for Cloudinary: Real-Time Synchronization","description":"With Cloudinary FTP API, you can use standard FTP clients to manage media assets in your Cloudinary account and maintain procedures that involve FTP transfers","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization","og_locale":"en_US","og_type":"article","og_title":"FTP API for Cloudinary: Real-Time Synchronization","og_description":"With Cloudinary FTP API, you can use standard FTP clients to manage media assets in your Cloudinary account and maintain procedures that involve FTP transfers","og_url":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization","og_site_name":"Cloudinary Blog","article_published_time":"2019-07-15T15:37:45+00:00","og_image":[{"width":1540,"height":847,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721107\/Web_Assets\/blog\/FTP-API\/FTP-API.jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization"},"author":{"name":"","@id":""},"headline":"FTP API for Cloudinary: Real-Time Synchronization","datePublished":"2019-07-15T15:37:45+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization"},"wordCount":6,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721107\/Web_Assets\/blog\/FTP-API\/FTP-API.jpg?_i=AA","inLanguage":"en-US","copyrightYear":"2019","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization","url":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization","name":"FTP API for Cloudinary: Real-Time Synchronization","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721107\/Web_Assets\/blog\/FTP-API\/FTP-API.jpg?_i=AA","datePublished":"2019-07-15T15:37:45+00:00","description":"With Cloudinary FTP API, you can use standard FTP clients to manage media assets in your Cloudinary account and maintain procedures that involve FTP transfers","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721107\/Web_Assets\/blog\/FTP-API\/FTP-API.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721107\/Web_Assets\/blog\/FTP-API\/FTP-API.jpg?_i=AA","width":1540,"height":847},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/ftp_api_for_cloudinary_part_1_real_time_synchronization#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"FTP API for Cloudinary: Real-Time Synchronization"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649721107\/Web_Assets\/blog\/FTP-API\/FTP-API.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=21923"}],"version-history":[{"count":0,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21923\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/21924"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=21923"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=21923"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=21923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}