{"id":22119,"date":"2020-07-07T23:11:23","date_gmt":"2020-07-07T23:11:23","guid":{"rendered":"http:\/\/uploading_vue_files_and_rich_media_in_two_easy_steps"},"modified":"2022-04-05T15:03:09","modified_gmt":"2022-04-05T22:03:09","slug":"uploading_vue_files_and_rich_media_in_two_easy_steps","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps","title":{"rendered":"Uploading Vue Files and Rich Media in Two Easy Steps"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>Vue.js, one of the most popular JavaScript front-end frameworks, is renowned for its simplicity and intuitiveness. Additionally, an active community ensures that plugins or packages, which you can quickly integrate with your app, are available for the Vue.js capabilities.<\/p>\n<p>This article steers you through a painless setup process for Vue <a href=\"https:\/\/cloudinary.com\/blog\/automating_file_upload_and_sharing\">file upload\u2019s<\/a> to Cloudinary. Follow the procedures below.<\/p>\n<h2>Set Up a Vue Project<\/h2>\n<p>The most straightforward way in which to quickly set up a Vue project is through <a href=\"https:\/\/cli.vuejs.org\/\">Vue CLI<\/a>.<\/p>\n<p>First, install Vue CLI:<\/p>\n<pre class=\"js-syntax-highlighted\"><span><code class=\"hljs shcb-wrap-lines\">npm install -g vue-cli\n<\/code><\/span><\/pre>\n<p>Second, create a Vue project:<\/p>\n<pre class=\"js-syntax-highlighted\"><span><code class=\"hljs shcb-wrap-lines\">vue create upload\n<\/code><\/span><\/pre>\n<p>Now run the project:<\/p>\n<pre class=\"js-syntax-highlighted\"><span><code class=\"hljs shcb-wrap-lines\">npm run serve\n<\/code><\/span><\/pre>\n<h2>Set Up File Uploads<\/h2>\n<h3>Step 1: Edit App.vue.<\/h3>\n<p>Edit the  <code>App.vue<\/code> file, as follows:<\/p>\n<p><strong>1.<\/strong> Within the <code>&lt;template&gt;<\/code> tag, delete all the code <strong>except<\/strong> for the <code>&lt;img&gt;<\/code> and <code>&lt;HelloWorld&gt;<\/code> components.<\/p>\n<p><strong>2.<\/strong> Add an <strong>Upload files<\/strong> button:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">button<\/span> @<span class=\"hljs-attr\">click<\/span>=<span class=\"hljs-string\">\"openUploadModal\"<\/span>&gt;<\/span>Upload files<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">button<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p><code>@click=\u201dopenUploadModal<\/code>  means that clicking <strong>Upload files<\/strong> calls the <code>openUploadModal<\/code> function.<\/p>\n<p><strong>3.<\/strong> Add the <code>openUploadModal<\/code> function to the JavaScript section of the file:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n<span class=\"hljs-keyword\">import<\/span> HelloWorld <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'.\/components\/HelloWorld.vue'<\/span>\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> {\n  <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">'App'<\/span>,\n  <span class=\"hljs-attr\">components<\/span>: {\n    HelloWorld,\n  },\n  <span class=\"hljs-attr\">methods<\/span>: {\n    openUploadModal() {\n     }\n}\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h3>Step 2: Integrate With the Cloudinary Upload Widget.<\/h3>\n<p>Use the Cloudinary upload widget for Vue file uploads. Seamless to integrate, that widget also offers many other remarkable features, including transformation and delivery.<\/p>\n<p>Do the following:<\/p>\n<p><strong>1.<\/strong> Open your <code>public\/index.html<\/code> file and add the widget script to the <code>&lt;body&gt;<\/code> tag:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"https:\/\/widget.cloudinary.com\/v2.0\/global\/all.js\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\/javascript\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p><strong>2.<\/strong> In <code>App.vue<\/code>, populate the <code>openUploadModal<\/code> function with this code:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">  <span class=\"hljs-built_in\">window<\/span>.cloudinary.openUploadWidget(\n        { <span class=\"hljs-attr\">cloud_name<\/span>: <span class=\"hljs-string\">'&lt;your-cloud-name&gt;'<\/span>,\n          <span class=\"hljs-attr\">upload_preset<\/span>: <span class=\"hljs-string\">'&lt;your-upload-preset&gt;'<\/span>\n        },\n        (error, result) =&gt; {\n          <span class=\"hljs-keyword\">if<\/span> (!error &amp;&amp; result &amp;&amp; result.event === <span class=\"hljs-string\">\"success\"<\/span>) {\n            <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">'Done uploading..: '<\/span>, result.info);          }\n        }).open();\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>The code above calls the widget\u2019s <code>openUploadWidget<\/code> function, invoking a robust upload modal and uploading the file.<\/p>\n<blockquote>\n<p>Note: Obtain your cloud name and value for the upload preset from your Cloudinary account\u2019s dashboard and settings page, respectively, for the values of <code>your-cloud-name<\/code> and <code>your-upload-preset<\/code>. <a href=\"https:\/\/cloudinary.com\/users\/register\/free\">Signing up for a Cloudinary account<\/a> is a prerequisite.<\/p>\n<\/blockquote>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/image\/upload\/w_700,c_fill,f_auto,q_auto,dpr_2.0\/Web_Assets\/blog\/presets.png\" alt=\"presets\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1400\" height=\"899\"\/>\n<em>Settings Page for Upload Presets<\/em><\/p>\n<p>Now click <strong>Upload files<\/strong> for the upload widget:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/image\/upload\/w_700,c_fill,f_auto,q_auto,dpr_2.0\/Web_Assets\/blog\/vue_upload.png\" alt=\"Cloudinary Upload Widget\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1400\" height=\"898\"\/>\n<em>Cloudinary Upload Widget<\/em><\/p>\n<p>Open your browser\u2019s DevTools so that you can watch the console during the upload:\n<img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/image\/upload\/w_700,c_fill,f_auto,q_auto,dpr_2.0\/Web_Assets\/blog\/app_vue.png\" alt=\"DevTools\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1400\" height=\"898\"\/><\/p>\n<p>The console returns all the information on the upload, including the URL. To display the image on your app, add a data variable to your JavaScript code in <code>App.vue<\/code> and assign the URL from the returned JSON response to the variable, as follows:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n<span class=\"hljs-keyword\">import<\/span> HelloWorld <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'.\/components\/HelloWorld.vue'<\/span>\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> {\n  <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">'App'<\/span>,\n  <span class=\"hljs-attr\">components<\/span>: {\n    HelloWorld,\n  },\n  data() {\n    <span class=\"hljs-keyword\">return<\/span> {\n      <span class=\"hljs-attr\">url<\/span>: <span class=\"hljs-string\">''<\/span>,\n    }\n  },\n  mounted() {\n\n  },\n  <span class=\"hljs-attr\">methods<\/span>: {\n    openUploadModal() {\n      <span class=\"hljs-built_in\">window<\/span>.cloudinary.openUploadWidget(\n        { <span class=\"hljs-attr\">cloud_name<\/span>: <span class=\"hljs-string\">'unicodeveloper'<\/span>,\n          <span class=\"hljs-attr\">upload_preset<\/span>: <span class=\"hljs-string\">'b9ej8dr5'<\/span>\n        },\n        (error, result) =&gt; {\n          <span class=\"hljs-keyword\">if<\/span> (!error &amp;&amp; result &amp;&amp; result.event === <span class=\"hljs-string\">\"success\"<\/span>) {\n            <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">'Done uploading..: '<\/span>, result.info);\n            <span class=\"hljs-keyword\">this<\/span>.url = result.info.url;\n          }\n        }).open();\n    }\n  }\n}\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n\nFinally, add the following to your template below the code for the **Upload files** button:\n\n```html\n....\n\u2026.\n\u2026.\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img<\/span> <span class=\"hljs-attr\">:src<\/span>=<span class=\"hljs-string\">\"url\"<\/span> \/&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>Now upload again.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/image\/upload\/w_700,c_fill,f_auto,q_auto,dpr_2.0\/Web_Assets\/blog\/vue_upload_files.png\" alt=\"Vue File Upload\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1400\" height=\"898\"\/><\/p>\n<p>Yes! That\u2019s a direct Vue file upload with no back-end setup, and pure vibes.<\/p>\n<h2>Other Enhancements<\/h2>\n<p>With Cloudinary\u2019s upload widget, you can do a lot more than just uploading files. An entire <a href=\"https:\/\/cloudinary.com\/documentation\/vue_integration#overview\">suite of drop-in Vue UI components<\/a> are available for cropping, transformation, video display, and numerous other tasks.<\/p>\n<p>Why not try a few by sprinkling them in your codebase to enhance the display of your uploaded image? Follow these steps:<\/p>\n<p><strong>1.<\/strong> Install Cloudinary\u2019s Vue SDK:<\/p>\n<pre class=\"js-syntax-highlighted\"><span><code class=\"hljs shcb-wrap-lines\">npm install cloudinary-vue\n<\/code><\/span><\/pre>\n<p><strong>2.<\/strong> Update <code>App.vue<\/code> to\u2014<\/p>\n<ul>\n<li>Import the components from the <code>cloudinary-vue<\/code> package.<\/li>\n<li>Place the UI components in the template.<\/li>\n<li>Add a <code>publicId<\/code> variable to the Vue <code>data()<\/code> function.<\/li>\n<li>Assign the <code>public_id<\/code> value returned from Cloudinary\u2019s JSON response to the data variable\u2019s public ID (<code>public_id<\/code>).<\/li>\n<\/ul>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"app\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img<\/span> <span class=\"hljs-attr\">alt<\/span>=<span class=\"hljs-string\">\"Vue logo\"<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\".\/assets\/logo.png\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">HelloWorld<\/span> <span class=\"hljs-attr\">msg<\/span>=<span class=\"hljs-string\">\"Welcome to Your Vue.js File Upload App\"<\/span>\/&gt;<\/span>\n\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">button<\/span> @<span class=\"hljs-attr\">click<\/span>=<span class=\"hljs-string\">\"openUploadModal\"<\/span>&gt;<\/span>Upload files<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">button<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-context<\/span> <span class=\"hljs-attr\">cloudName<\/span>=<span class=\"hljs-string\">\"&lt;your-cloud-name&gt;\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"display: flex; justify-content: center;\"<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-image<\/span> <span class=\"hljs-attr\">:publicId<\/span>=<span class=\"hljs-string\">\"publicId\"<\/span> <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"250\"<\/span> <span class=\"hljs-attr\">crop<\/span>=<span class=\"hljs-string\">\"scale\"<\/span> \/&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-image<\/span> <span class=\"hljs-attr\">:publicId<\/span>=<span class=\"hljs-string\">\"publicId\"<\/span> <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"300\"<\/span> <span class=\"hljs-attr\">crop<\/span>=<span class=\"hljs-string\">\"scale\"<\/span> \/&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-image<\/span> <span class=\"hljs-attr\">:publicId<\/span>=<span class=\"hljs-string\">\"publicId\"<\/span> <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"350\"<\/span> <span class=\"hljs-attr\">crop<\/span>=<span class=\"hljs-string\">\"scale\"<\/span> \/&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-image<\/span> <span class=\"hljs-attr\">:publicId<\/span>=<span class=\"hljs-string\">\"publicId\"<\/span> <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"400\"<\/span> <span class=\"hljs-attr\">crop<\/span>=<span class=\"hljs-string\">\"scale\"<\/span> \/&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-image<\/span> <span class=\"hljs-attr\">:publicId<\/span>=<span class=\"hljs-string\">\"publicId\"<\/span> <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"450\"<\/span> <span class=\"hljs-attr\">crop<\/span>=<span class=\"hljs-string\">\"scale\"<\/span> \/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cld-context<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n<span class=\"hljs-keyword\">import<\/span> HelloWorld <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'.\/components\/HelloWorld.vue'<\/span>\n<span class=\"hljs-keyword\">import<\/span> { CldContext, CldImage } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'cloudinary-vue'<\/span>\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> {\n  <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">'App'<\/span>,\n  <span class=\"hljs-attr\">components<\/span>: {\n    HelloWorld,\n    CldContext,\n    CldImage\n  },\n  data() {\n    <span class=\"hljs-keyword\">return<\/span> {\n      <span class=\"hljs-attr\">url<\/span>: <span class=\"hljs-string\">''<\/span>,\n      <span class=\"hljs-attr\">publicId<\/span>: <span class=\"hljs-string\">''<\/span>\n    }\n  },\n  <span class=\"hljs-attr\">methods<\/span>: {\n    openUploadModal() {\n      <span class=\"hljs-built_in\">window<\/span>.cloudinary.openUploadWidget(\n        { <span class=\"hljs-attr\">cloud_name<\/span>: <span class=\"hljs-string\">'&lt;your-cloud-name&gt;'<\/span>,\n          <span class=\"hljs-attr\">upload_preset<\/span>: <span class=\"hljs-string\">'&lt;your-upload-preset&gt;'<\/span>\n        },\n        (error, result) =&gt; {\n          <span class=\"hljs-keyword\">if<\/span> (!error &amp;&amp; result &amp;&amp; result.event === <span class=\"hljs-string\">\"success\"<\/span>) {\n            <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">'Done uploading..: '<\/span>, result.info);\n            <span class=\"hljs-keyword\">this<\/span>.url = result.info.url;\n            <span class=\"hljs-keyword\">this<\/span>.publicId = result.info.public_id;\n          }\n        }).open();\n    }\n  }\n}\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">style<\/span>&gt;<\/span><span class=\"css\">\n<span class=\"hljs-selector-id\">#app<\/span> {\n  <span class=\"hljs-attribute\">font-family<\/span>: Avenir, Helvetica, Arial, sans-serif;\n  <span class=\"hljs-attribute\">-webkit-font-smoothing<\/span>: antialiased;\n  <span class=\"hljs-attribute\">-moz-osx-font-smoothing<\/span>: grayscale;\n  <span class=\"hljs-attribute\">text-align<\/span>: center;\n  <span class=\"hljs-attribute\">color<\/span>: <span class=\"hljs-number\">#2c3e50<\/span>;\n  <span class=\"hljs-attribute\">margin-top<\/span>: <span class=\"hljs-number\">60px<\/span>;\n}\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">style<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>Now upload your files. Yaaaaay!<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/image\/upload\/w_700,c_fill,f_auto,q_auto,dpr_2.0\/Web_Assets\/blog\/vue_file_upload.jpg\" alt=\"vue file upload\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1400\" height=\"891\"\/><\/p>\n<h2>A Challenge for You<\/h2>\n<p>Here\u2019s a challenge for you: take Vue file uploads to a more sophisticated level. Maybe start with the <a href=\"https:\/\/cloudinary.com\/documentation\/vue_integration#2_include_the_required_components_of_the_cloudinary_vue_library_in_your_code\"><code>CldTransformation<\/code> and <code>CldPoster<\/code> components<\/a>.<\/p>\n<p>The sky\u2019s the limit as to how many amazing things you can do with Cloudinary to enhance your app\u2019s media capabilities. Do start right away! You\u2019ll be happy you did.<\/p>\n<h2>Want to Learn More About File Uploads?<\/h2>\n<ul>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/automating_file_upload_and_sharing\">Automating File Upload and Sharing<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/file_upload_with_php\">Uploading PHP Files and Rich Media the Easy Way<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/file_upload_with_ajax\">AJAX File Upload &#8211; Quick Tutorial &amp; Time Saving Tips<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/impressed_by_whatsapp_technology_build_a_whatsapp_clone_with_image_and_video_upload\">Impressed by WhatsApp technology? Clone WhatsApp Technology to Build a File Upload Android App<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/direct_image_uploads_from_the_browser_to_the_cloud_with_jquery\">Direct Image Uploads From the Browser to the Cloud With jQuery<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/file_upload_with_angular_or_angularjs_to_cloudinary\">File Upload With Angular to Cloudinary<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps\">Uploading Vue Files and Rich Media in Two Easy Steps<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/node_js_file_upload_to_a_local_server_or_to_the_cloud\">Node.js File Upload To a Local Server Or to the Cloud<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/laravel_file_upload_to_a_local_server_or_to_the_cloud\">Laravel File Upload to a Local Server Or to the Cloud<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/javascript_file_upload_to_cloudinary\">JavaScript File Upload in Two Simple Step<\/a>\n<\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":22120,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[25,119,315],"class_list":["post-22119","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-asset-management","tag-file-upload","tag-vue"],"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>Uploading Vue Files to Cloudinary<\/title>\n<meta name=\"description\" content=\"Uploading Vue files to Cloudinary takes only a preliminary setup of a Vue project and an integration with Cloudinary\u2019s upload widget.\" \/>\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\/uploading_vue_files_and_rich_media_in_two_easy_steps\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Uploading Vue Files and Rich Media in Two Easy Steps\" \/>\n<meta property=\"og:description\" content=\"Uploading Vue files to Cloudinary takes only a preliminary setup of a Vue project and an integration with Cloudinary\u2019s upload widget.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-07T23:11:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-05T22:03:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1645222428\/website-2021\/blog\/Vue-File-Upload\/Vue-File-Upload-png?_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\/png\" \/>\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\/uploading_vue_files_and_rich_media_in_two_easy_steps#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Uploading Vue Files and Rich Media in Two Easy Steps\",\"datePublished\":\"2020-07-07T23:11:23+00:00\",\"dateModified\":\"2022-04-05T22:03:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps\"},\"wordCount\":10,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649722529\/Web_Assets\/blog\/Vue-File-Upload_221203801d\/Vue-File-Upload_221203801d.png?_i=AA\",\"keywords\":[\"Asset Management\",\"File-upload\",\"Vue\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2020\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps\",\"url\":\"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps\",\"name\":\"Uploading Vue Files to Cloudinary\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649722529\/Web_Assets\/blog\/Vue-File-Upload_221203801d\/Vue-File-Upload_221203801d.png?_i=AA\",\"datePublished\":\"2020-07-07T23:11:23+00:00\",\"dateModified\":\"2022-04-05T22:03:09+00:00\",\"description\":\"Uploading Vue files to Cloudinary takes only a preliminary setup of a Vue project and an integration with Cloudinary\u2019s upload widget.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649722529\/Web_Assets\/blog\/Vue-File-Upload_221203801d\/Vue-File-Upload_221203801d.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649722529\/Web_Assets\/blog\/Vue-File-Upload_221203801d\/Vue-File-Upload_221203801d.png?_i=AA\",\"width\":1540,\"height\":847},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Uploading Vue Files and Rich Media in Two Easy Steps\"}]},{\"@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":"Uploading Vue Files to Cloudinary","description":"Uploading Vue files to Cloudinary takes only a preliminary setup of a Vue project and an integration with Cloudinary\u2019s upload widget.","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\/uploading_vue_files_and_rich_media_in_two_easy_steps","og_locale":"en_US","og_type":"article","og_title":"Uploading Vue Files and Rich Media in Two Easy Steps","og_description":"Uploading Vue files to Cloudinary takes only a preliminary setup of a Vue project and an integration with Cloudinary\u2019s upload widget.","og_url":"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps","og_site_name":"Cloudinary Blog","article_published_time":"2020-07-07T23:11:23+00:00","article_modified_time":"2022-04-05T22:03:09+00:00","og_image":[{"width":1540,"height":847,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1645222428\/website-2021\/blog\/Vue-File-Upload\/Vue-File-Upload-png?_i=AA","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps"},"author":{"name":"","@id":""},"headline":"Uploading Vue Files and Rich Media in Two Easy Steps","datePublished":"2020-07-07T23:11:23+00:00","dateModified":"2022-04-05T22:03:09+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps"},"wordCount":10,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649722529\/Web_Assets\/blog\/Vue-File-Upload_221203801d\/Vue-File-Upload_221203801d.png?_i=AA","keywords":["Asset Management","File-upload","Vue"],"inLanguage":"en-US","copyrightYear":"2020","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps","url":"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps","name":"Uploading Vue Files to Cloudinary","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649722529\/Web_Assets\/blog\/Vue-File-Upload_221203801d\/Vue-File-Upload_221203801d.png?_i=AA","datePublished":"2020-07-07T23:11:23+00:00","dateModified":"2022-04-05T22:03:09+00:00","description":"Uploading Vue files to Cloudinary takes only a preliminary setup of a Vue project and an integration with Cloudinary\u2019s upload widget.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649722529\/Web_Assets\/blog\/Vue-File-Upload_221203801d\/Vue-File-Upload_221203801d.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649722529\/Web_Assets\/blog\/Vue-File-Upload_221203801d\/Vue-File-Upload_221203801d.png?_i=AA","width":1540,"height":847},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/uploading_vue_files_and_rich_media_in_two_easy_steps#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Uploading Vue Files and Rich Media in Two Easy Steps"}]},{"@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\/v1649722529\/Web_Assets\/blog\/Vue-File-Upload_221203801d\/Vue-File-Upload_221203801d.png?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/22119","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=22119"}],"version-history":[{"count":2,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/22119\/revisions"}],"predecessor-version":[{"id":23857,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/22119\/revisions\/23857"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/22120"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=22119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=22119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=22119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}