{"id":560,"date":"2019-02-04T23:58:28","date_gmt":"2019-02-04T23:58:28","guid":{"rendered":"http:\/\/upmostlymulti.onpressidium.com\/?p=560"},"modified":"2021-10-28T10:56:28","modified_gmt":"2021-10-28T15:56:28","slug":"react-dropzone-file-uploads-react","status":"publish","type":"post","link":"http:\/\/upmostly.com\/tutorials\/react-dropzone-file-uploads-react","title":{"rendered":"React Dropzone and File Uploads in React"},"content":{"rendered":"\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/upmostly.com\/wp-content\/uploads\/react-dropzone-file-uploads.jpg\" alt=\"React Dropzone and file uploads in React banner showing a cloud file upload image next to the React logo.\" class=\"wp-image-595\"\/><\/figure>\n\n\n\n<p>In this tutorial, we&#8217;ll learn how to use React Dropzone to create an awesome file uploader. Keep reading to learn more about react-dropzone.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Read part two in the React file upload series: <a rel=\"noreferrer noopener\" aria-label=\"Upload a File from a React Component (opens in a new tab)\" href=\"http:\/\/upmostly.com\/tutorials\/upload-a-file-from-a-react-component\/\" target=\"_blank\">Upload a File from a React Component<\/a><\/p><\/blockquote>\n\n\n\n<p>To begin, open up an existing React project. If you don&#8217;t have an existing React project that uses the <a href=\"https:\/\/react-dropzone.netlify.com\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"To begin, open up an existing React project. If you don&#039;t have an existing React project that uses the react-dropzone library, generate a new  one using Create React App. I&#039;ll show you how to do this below. (opens in a new tab)\">react-dropzone library<\/a>, generate a new  one using Create React App. I&#8217;ll show you how to do this below.<\/p>\n\n\n\n<p>Call the new project&nbsp;<strong>file-upload.<\/strong><\/p>\n\n\n\n<p>I&#8217;m also showing you the option to install Bootstrap, which I&#8217;ll be using in the examples throughout this tutorial.&nbsp;<\/p>\n\n\n\n<div class=\"wp-block-cgb-block-codeplus\"><div class=\"upmostly-block better-code-block\"><div class=\"dark\"><div class=\"code-editor-header\">Terminal<\/div><pre class=\"language-bash\"><code class=\"language-bash\"><div>npx create-react-app file-upload\n<span class=\"token function\">cd<\/span> file-upload\n<span class=\"token function\">npm<\/span> <span class=\"token function\">install<\/span> --save react-dropzone\n\n\/\/ Optional\n<span class=\"token function\">npm<\/span> <span class=\"token function\">install<\/span> --save bootstrap<\/div><\/code><\/pre><\/div><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">A Basic React Dropzone File Picker<\/h2>\n\n\n\n<p>We&#8217;re going to start by building a very simple file picker using React Dropzone. <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>As an extra challenge, try to follow this tutorial using React Hooks. If you&#8217;re new to Hooks, I&#8217;ve written a <a rel=\"noreferrer noopener\" aria-label=\"As an extra challenge, try to follow this tutorial using React Hooks. I&#039;ve written a simple introduction to React Hooks. (opens in a new tab)\" href=\"http:\/\/upmostly.com\/tutorials\/react-hooks-simple-introduction\/\" target=\"_blank\">simple introduction to React Hooks<\/a>.<\/p><\/blockquote>\n\n\n\n<p>Jump into&nbsp;<strong><span class=\"has-inline-color has-vivid-red-color\">App.js<\/span><\/strong>&nbsp;and start by removing the boilerplate code in the render function. After you&#8217;ve stripped out this unwanted code, import the&nbsp;<strong>React<\/strong> <strong>Dropzone <\/strong>library at the top of the file, below all of the other imports.<\/p>\n\n\n\n<p>Finally, add the React Dropzone component to the return of the render method, as well as an <strong><em>onDrop<\/em><\/strong> method above it.<\/p>\n\n\n\n<p>Your&nbsp;<strong><span class=\"has-inline-color has-vivid-red-color\">App.js<\/span> <\/strong>should look like this:<\/p>\n\n\n\n<div class=\"wp-block-cgb-block-codeplus\"><div class=\"upmostly-block better-code-block\"><div class=\"dark\"><div class=\"code-editor-header\">App.js<\/div><pre class=\"language-jsx\"><code class=\"language-jsx\"><div><span class=\"token keyword\">import<\/span> React<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span> Component <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">from<\/span> <span class=\"token string\">'react'<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token keyword\">import<\/span> Dropzone <span class=\"token keyword\">from<\/span> <span class=\"token string\">'react-dropzone'<\/span>\n\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">App<\/span> <span class=\"token keyword\">extends<\/span> <span class=\"token class-name\">Component<\/span> <span class=\"token punctuation\">{<\/span>\n\n  <span class=\"token function-variable function\">onDrop<\/span> <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span>acceptedFiles<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=><\/span> <span class=\"token punctuation\">{<\/span>\n    console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>acceptedFiles<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n  <span class=\"token punctuation\">}<\/span>\n\n  <span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">className<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>text-center mt-5<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n        <\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>Dropzone<\/span> <span class=\"token attr-name\">onDrop<\/span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span>onDrop<span class=\"token punctuation\">}<\/span><\/span><span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n          <\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span>getRootProps<span class=\"token punctuation\">,<\/span> getInputProps<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=><\/span> <span class=\"token punctuation\">(<\/span>\n            <span class=\"token operator\">&lt;<\/span>div <span class=\"token punctuation\">{<\/span><span class=\"token operator\">...<\/span><span class=\"token function\">getRootProps<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><span class=\"token operator\">><\/span>\n              <span class=\"token operator\">&lt;<\/span>input <span class=\"token punctuation\">{<\/span><span class=\"token operator\">...<\/span><span class=\"token function\">getInputProps<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span> <span class=\"token operator\">\/<\/span><span class=\"token operator\">><\/span>\n              Click me to upload a file<span class=\"token operator\">!<\/span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">><\/span><\/span>\n          <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><span class=\"token plain-text\">\n        <\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>Dropzone<\/span><span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n      <\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">><\/span><\/span>\n    <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n  <span class=\"token punctuation\">}<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">export<\/span> <span class=\"token keyword\">default<\/span> App<span class=\"token punctuation\">;<\/span><\/div><\/code><\/pre><\/div><\/div><\/div>\n\n\n\n<p>React Dropzone only needs one method passed into the <strong><em>onDrop<\/em><\/strong> prop to handle files when they&#8217;re selected. <\/p>\n\n\n\n<p>To keep things simple, we&#8217;ll name the method the same as the prop: <strong><em>onDrop<\/em><\/strong>.<\/p>\n\n\n\n<p>Our <strong><em>onDrop<\/em><\/strong> method has a single parameter, <strong>acceptedFiles<\/strong>, which for the time-being we log out to the console. This is only for testing purposes.<\/p>\n\n\n\n<p>Save the component, open your browser and go to your running React app. Click the text label and a file picker window will open up! Great! We&#8217;ve got a basic file picker working.<\/p>\n\n\n\n<p>Clicking a file to upload won&#8217;t do anything just yet. For that to work, we have to send the file to a server, which we&#8217;ll cover at a later date.<\/p>\n\n\n\n<p>Let&#8217;s continue to explore what else React Dropzone can do!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Render Props<\/h2>\n\n\n\n<p>Dropzone may look different to other React components you&#8217;ve seen. This is because it uses the <em>Render Props<\/em> technique.<\/p>\n\n\n\n<p>The <strong>Render Prop Function<\/strong> is used to change the HTML inside of the Dropzone component, based on the current state of Dropzone.<\/p>\n\n\n\n<p>To demonstrate, let&#8217;s add a variable to the Render Prop function called <strong>isDragActive<\/strong>. This gives us access to Dropzone&#8217;s current drag state.<\/p>\n\n\n\n<p>Now that we have access to the <strong>isDragActive<\/strong> state, we can change the text value of the label to show something different when a file is dragged over the component.<\/p>\n\n\n\n<div class=\"wp-block-cgb-block-codeplus\"><div class=\"upmostly-block better-code-block\"><div class=\"dark\"><div class=\"code-editor-header\">App.js<\/div><pre class=\"language-jsx\"><code class=\"language-jsx\"><div><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>Dropzone<\/span> <span class=\"token attr-name\">onDrop<\/span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span>onDrop<span class=\"token punctuation\">}<\/span><\/span><span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n  <\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span>getRootProps<span class=\"token punctuation\">,<\/span> getInputProps<span class=\"token punctuation\">,<\/span> isDragActive<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=><\/span> <span class=\"token punctuation\">(<\/span>\n    <span class=\"token operator\">&lt;<\/span>div <span class=\"token punctuation\">{<\/span><span class=\"token operator\">...<\/span><span class=\"token function\">getRootProps<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><span class=\"token operator\">><\/span>\n      <span class=\"token operator\">&lt;<\/span>input <span class=\"token punctuation\">{<\/span><span class=\"token operator\">...<\/span><span class=\"token function\">getInputProps<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span> <span class=\"token operator\">\/<\/span><span class=\"token operator\">><\/span>\n      <span class=\"token punctuation\">{<\/span>isDragActive <span class=\"token operator\">?<\/span> <span class=\"token string\">\"Drop it like it's hot!\"<\/span> <span class=\"token punctuation\">:<\/span> <span class=\"token string\">'Click me or drag a file to upload!'<\/span><span class=\"token punctuation\">}<\/span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">><\/span><\/span>\n  <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><span class=\"token plain-text\">\n<\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>Dropzone<\/span><span class=\"token punctuation\">><\/span><\/span><\/div><\/code><\/pre><\/div><\/div><\/div>\n\n\n\n<p>In the code above, we&#8217;re writing an inline conditional that checks if&nbsp;<strong>isDragActive<\/strong>&nbsp;is true. If it is, write &#8220;Drop it like it&#8217;s hot&#8221;, else write, &#8220;Click me or drag a file to upload!&#8221;.<\/p>\n\n\n\n<p>Let&#8217;s jump back to the browser and see it in action.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1050\" height=\"600\" src=\"http:\/\/upmostly.com\/wp-content\/uploads\/react-dropzone-drag.gif\" alt=\"\" class=\"wp-image-566\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Allowing Specific Types of File<\/h2>\n\n\n\n<p>Currently, our file picker allows us to pick any type of file to upload.<\/p>\n\n\n\n<p>Depending on what you&#8217;re using a file picker for, you may want to allow specific types of files, such as only .JPG files, or only .XLS and .DOCX files.<\/p>\n\n\n\n<p>To do this, we&#8217;ll use the <strong>accept<\/strong> prop.<\/p>\n\n\n\n<p>Let&#8217;s add the accept prop after&nbsp;<strong><em>onDrop<\/em><\/strong>&nbsp;within the Dropzone component declaration,&nbsp;like so:<\/p>\n\n\n\n<div class=\"wp-block-cgb-block-codeplus\"><div class=\"upmostly-block better-code-block\"><div class=\"dark\"><div class=\"code-editor-header\">App.js<\/div><pre class=\"language-jsx\"><code class=\"language-jsx\"><div><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>Dropzone<\/span>\n  <span class=\"token attr-name\">onDrop<\/span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span>onDrop<span class=\"token punctuation\">}<\/span><\/span>\n  <span class=\"token attr-name\">accept<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>image\/png, image\/gif<span class=\"token punctuation\">\"<\/span><\/span>\n<span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n...\n<\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>Dropzone<\/span><span class=\"token punctuation\">><\/span><\/span><\/div><\/code><\/pre><\/div><\/div><\/div>\n\n\n\n<p>File types are written as MIME types, with multiple values separated by a comma. Mozilla has a great resource that gives a&nbsp;<a rel=\"noreferrer noopener\" aria-label=\"File types are written as MIME types, with multiple values seperated by a comma. Mozilla has a great full list of MIME types.&nbsp; (opens in a new tab)\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Basics_of_HTTP\/MIME_types\/Complete_list_of_MIME_types\" target=\"_blank\">full list of MIME types<\/a>.&nbsp;<\/p>\n\n\n\n<p>Let&#8217;s improve our file picker user experience by showing a message if the user tries to upload a file type that&#8217;s not accepted. <\/p>\n\n\n\n<p>To do that, we&#8217;ll add another render prop called&nbsp;<strong>isDragRejected<\/strong>. We&#8217;ll move around the inline conditional logic somewhat to account for this new render prop.<\/p>\n\n\n\n<div class=\"wp-block-cgb-block-codeplus\"><div class=\"upmostly-block better-code-block\"><div class=\"dark\"><div class=\"code-editor-header\">App.js<\/div><pre class=\"language-jsx\"><code class=\"language-jsx\"><div><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>Dropzone<\/span>\n  <span class=\"token attr-name\">onDrop<\/span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span>onDrop<span class=\"token punctuation\">}<\/span><\/span>\n  <span class=\"token attr-name\">accept<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>image\/png<span class=\"token punctuation\">\"<\/span><\/span>\n<span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n  <\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span>getRootProps<span class=\"token punctuation\">,<\/span> getInputProps<span class=\"token punctuation\">,<\/span> isDragActive<span class=\"token punctuation\">,<\/span> isDragReject<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=><\/span> <span class=\"token punctuation\">(<\/span>\n    <span class=\"token operator\">&lt;<\/span>div <span class=\"token punctuation\">{<\/span><span class=\"token operator\">...<\/span><span class=\"token function\">getRootProps<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><span class=\"token operator\">><\/span>\n      <span class=\"token operator\">&lt;<\/span>input <span class=\"token punctuation\">{<\/span><span class=\"token operator\">...<\/span><span class=\"token function\">getInputProps<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span> <span class=\"token operator\">\/<\/span><span class=\"token operator\">><\/span>\n      <span class=\"token punctuation\">{<\/span><span class=\"token operator\">!<\/span>isDragActive <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token string\">'Click here or drop a file to upload!'<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token punctuation\">{<\/span>isDragActive <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token operator\">!<\/span>isDragReject <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token string\">\"Drop it like it's hot!\"<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token punctuation\">{<\/span>isDragReject <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token string\">\"File type not accepted, sorry!\"<\/span><span class=\"token punctuation\">}<\/span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">><\/span><\/span>\n  <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><span class=\"token plain-text\">\n<\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>Dropzone<\/span><span class=\"token punctuation\">><\/span><\/span><\/div><\/code><\/pre><\/div><\/div><\/div>\n\n\n\n<p>Save the file, hop on back to your browser and try to drag a .JPG file onto the file picker.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1050\" height=\"280\" src=\"http:\/\/upmostly.com\/wp-content\/uploads\/react-dropzone-accept.gif\" alt=\"\" class=\"wp-image-586\"\/><\/figure>\n\n\n\n<p>A message appears letting the user know that our file picker doesn&#8217;t accept that type of file. Perfect!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Minimum and Maximum File Size<\/h2>\n\n\n\n<p>Specifying the minimum and maximum file size is very important. In a real world file uploader, you wouldn&#8217;t want one of your users dragging in a 1GB file to upload, and crippling your server.<\/p>\n\n\n\n<p>Luckily we can limit the size of the file that&#8217;s being uploaded in React Dropzone through two props,&nbsp;<strong>minSize and maxSize. <\/strong>Both of these props take a number value specified in bytes.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>For your reference, 1 Megabyte =&nbsp;1048576 Bytes. <\/p><\/blockquote>\n\n\n\n<p>Jump back into your code, and add the two minSize and maxSize props to the Dropzone component, right underneath the accept prop.<\/p>\n\n\n\n<div class=\"wp-block-cgb-block-codeplus\"><div class=\"upmostly-block better-code-block\"><div class=\"dark\"><div class=\"code-editor-header\">App.js<\/div><pre class=\"language-jsx\"><code class=\"language-jsx\"><div><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>Dropzone<\/span>\n  <span class=\"token attr-name\">onDrop<\/span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span>onDrop<span class=\"token punctuation\">}<\/span><\/span>\n  <span class=\"token attr-name\">accept<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>image\/png<span class=\"token punctuation\">\"<\/span><\/span>\n  <span class=\"token attr-name\">minSize<\/span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=<\/span><span class=\"token punctuation\">{<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><\/span>\n  <span class=\"token attr-name\">maxSize<\/span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=<\/span><span class=\"token punctuation\">{<\/span><span class=\"token number\">5242880<\/span><span class=\"token punctuation\">}<\/span><\/span>\n<span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n  ...\n<\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>Dropzone<\/span><span class=\"token punctuation\">><\/span><\/span><\/div><\/code><\/pre><\/div><\/div><\/div>\n\n\n\n<p>We&#8217;re accepting a file with a maximum size of 5MB and under in the example above.<\/p>\n\n\n\n<p>Let&#8217;s add some more code to our file input component that checks the maximum file size and displays an error message if the file being uploaded is larger.<\/p>\n\n\n\n<div class=\"wp-block-cgb-block-codeplus\"><div class=\"upmostly-block better-code-block\"><div class=\"dark\"><div class=\"code-editor-header\">App.js<\/div><pre class=\"language-jsx\"><code class=\"language-jsx\"><div><span class=\"token function\">render<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token keyword\">const<\/span> maxSize <span class=\"token operator\">=<\/span> <span class=\"token number\">1048576<\/span><span class=\"token punctuation\">;<\/span>\n  <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">className<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>text-center mt-5<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n      <\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>Dropzone<\/span>\n        <span class=\"token attr-name\">onDrop<\/span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span>onDrop<span class=\"token punctuation\">}<\/span><\/span>\n        <span class=\"token attr-name\">accept<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>image\/png<span class=\"token punctuation\">\"<\/span><\/span>\n        <span class=\"token attr-name\">minSize<\/span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=<\/span><span class=\"token punctuation\">{<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><\/span>\n        <span class=\"token attr-name\">maxSize<\/span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=<\/span><span class=\"token punctuation\">{<\/span>maxSize<span class=\"token punctuation\">}<\/span><\/span>\n      <span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n        <\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span>getRootProps<span class=\"token punctuation\">,<\/span> getInputProps<span class=\"token punctuation\">,<\/span> isDragActive<span class=\"token punctuation\">,<\/span> isDragReject<span class=\"token punctuation\">,<\/span> rejectedFiles<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=><\/span> <span class=\"token punctuation\">{<\/span>\n          <span class=\"token keyword\">const<\/span> isFileTooLarge <span class=\"token operator\">=<\/span> rejectedFiles<span class=\"token punctuation\">.<\/span>length <span class=\"token operator\">><\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">&amp;&amp;<\/span> rejectedFiles<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>size <span class=\"token operator\">><\/span> maxSize<span class=\"token punctuation\">;<\/span>\n          <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span>\n            <span class=\"token operator\">&lt;<\/span>div <span class=\"token punctuation\">{<\/span><span class=\"token operator\">...<\/span><span class=\"token function\">getRootProps<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><span class=\"token operator\">><\/span>\n              <span class=\"token operator\">&lt;<\/span>input <span class=\"token punctuation\">{<\/span><span class=\"token operator\">...<\/span><span class=\"token function\">getInputProps<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span> <span class=\"token operator\">\/<\/span><span class=\"token operator\">><\/span>\n              <span class=\"token punctuation\">{<\/span><span class=\"token operator\">!<\/span>isDragActive <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token string\">'Click here or drop a file to upload!'<\/span><span class=\"token punctuation\">}<\/span>\n              <span class=\"token punctuation\">{<\/span>isDragActive <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token operator\">!<\/span>isDragReject <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token string\">\"Drop it like it's hot!\"<\/span><span class=\"token punctuation\">}<\/span>\n              <span class=\"token punctuation\">{<\/span>isDragReject <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token string\">\"File type not accepted, sorry!\"<\/span><span class=\"token punctuation\">}<\/span>\n              <span class=\"token punctuation\">{<\/span>isFileTooLarge <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token punctuation\">(<\/span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">className<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>text-danger mt-2<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n                  File is too large.\n                <\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">><\/span><\/span>\n              <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">><\/span><\/span>\n          <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token punctuation\">}<\/span><span class=\"token plain-text\">\n      <\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>Dropzone<\/span><span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n    <\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">><\/span><\/span>\n  <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><\/div><\/code><\/pre><\/div><\/div><\/div>\n\n\n\n<p>It might look like we&#8217;ve added a lot, but actually it&#8217;s less than 10 lines.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>At the top of the render method, we declare a new const called <strong>maxSize<\/strong> and set it to 1MB.<\/li><li>Reference this new maxSize variable in the maxSize prop within Dropzone.<\/li><li>We add another render prop to Dropzone called <strong>rejectedFiles<\/strong><\/li><li>Directly underneath the render prop function within Dropzone, we declare another const called <strong>isFileTooLarge<\/strong>, which gets the first file from the rejectedFiles array prop, and checks to see if the size is greater than our maxSize variable.<\/li><li>Finally, we&#8217;re writing an inline conditional that checks if isFileTooLarge is true, and renders &#8216;File is too large.&#8217; in red.<\/li><\/ul>\n\n\n\n<p>Let&#8217;s see it in action!<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1050\" height=\"280\" src=\"http:\/\/upmostly.com\/wp-content\/uploads\/react-dropzone-file-large.gif\" alt=\"\" class=\"wp-image-590\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Multiple Files<\/h2>\n\n\n\n<p>The last feature of React Dropzone that we&#8217;ll cover is the ability to upload multiple files.<\/p>\n\n\n\n<p>This one is fairly simple, as we&#8217;re not adding any code inside the render prop function.<\/p>\n\n\n\n<p>Just add the&nbsp;<strong>multiple<\/strong> prop to the React Dropzone component declaration, like so:<\/p>\n\n\n\n<div class=\"wp-block-cgb-block-codeplus\"><div class=\"upmostly-block better-code-block\"><div class=\"dark\"><div class=\"code-editor-header\">App.js<\/div><pre class=\"language-jsx\"><code class=\"language-jsx\"><div><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>Dropzone<\/span>\n  <span class=\"token attr-name\">onDrop<\/span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span>onDrop<span class=\"token punctuation\">}<\/span><\/span>\n  <span class=\"token attr-name\">accept<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>image\/png<span class=\"token punctuation\">\"<\/span><\/span>\n  <span class=\"token attr-name\">minSize<\/span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=<\/span><span class=\"token punctuation\">{<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><\/span>\n  <span class=\"token attr-name\">maxSize<\/span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=<\/span><span class=\"token punctuation\">{<\/span>maxSize<span class=\"token punctuation\">}<\/span><\/span>\n  <span class=\"token attr-name\">multiple<\/span>\n<span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n  ...\n<\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>Dropzone<\/span><span class=\"token punctuation\">><\/span><\/span><\/div><\/code><\/pre><\/div><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">React Dropzone using Hooks<\/h2>\n\n\n\n<p>Since writing this tutorial React Hooks have been officially released, and the react-dropzone library has been updated to include a custom <strong><em>useDropzone<\/em><\/strong> Hook.<\/p>\n\n\n\n<p>Therefore, I&#8217;ve re-written the whole <strong><span class=\"has-inline-color has-vivid-red-color\">App.js <\/span><\/strong>as a functional component using the <strong><em>useDropzone<\/em><\/strong> custom hook provided by <g class=\"gr_ gr_95 gr-alert gr_gramm gr_inline_cards gr_run_anim Grammar multiReplace\" id=\"95\" data-gr-id=\"95\">react<\/g> dropzone:<\/p>\n\n\n\n<div class=\"wp-block-cgb-block-codeplus\"><div class=\"upmostly-block better-code-block\"><div class=\"dark\"><div class=\"code-editor-header\">App.js<\/div><pre class=\"language-jsx\"><code class=\"language-jsx\"><div><span class=\"token keyword\">import<\/span> React<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span> useCallback <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">from<\/span> <span class=\"token string\">'react'<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token keyword\">import<\/span> <span class=\"token punctuation\">{<\/span> useDropzone <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">from<\/span> <span class=\"token string\">'react-dropzone'<\/span>\n\n<span class=\"token keyword\">const<\/span> <span class=\"token function-variable function\">App<\/span> <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=><\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token keyword\">const<\/span> maxSize <span class=\"token operator\">=<\/span> <span class=\"token number\">1048576<\/span><span class=\"token punctuation\">;<\/span>\n\n  <span class=\"token keyword\">const<\/span> onDrop <span class=\"token operator\">=<\/span> <span class=\"token function\">useCallback<\/span><span class=\"token punctuation\">(<\/span>acceptedFiles <span class=\"token operator\">=><\/span> <span class=\"token punctuation\">{<\/span>\n    console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>acceptedFiles<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n  <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span> isDragActive<span class=\"token punctuation\">,<\/span> getRootProps<span class=\"token punctuation\">,<\/span> getInputProps<span class=\"token punctuation\">,<\/span> isDragReject<span class=\"token punctuation\">,<\/span> acceptedFiles<span class=\"token punctuation\">,<\/span> rejectedFiles <span class=\"token punctuation\">}<\/span> <span class=\"token operator\">=<\/span> <span class=\"token function\">useDropzone<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span>\n    onDrop<span class=\"token punctuation\">,<\/span>\n    accept<span class=\"token punctuation\">:<\/span> <span class=\"token string\">'image\/png'<\/span><span class=\"token punctuation\">,<\/span>\n    minSize<span class=\"token punctuation\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span>\n    maxSize<span class=\"token punctuation\">,<\/span>\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n  <span class=\"token keyword\">const<\/span> isFileTooLarge <span class=\"token operator\">=<\/span> rejectedFiles<span class=\"token punctuation\">.<\/span>length <span class=\"token operator\">><\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">&amp;&amp;<\/span> rejectedFiles<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>size <span class=\"token operator\">><\/span> maxSize<span class=\"token punctuation\">;<\/span>\n  \n  <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">className<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>container text-center mt-5<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n      &lt;div <\/span><span class=\"token punctuation\">{<\/span><span class=\"token operator\">...<\/span><span class=\"token function\">getRootProps<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><span class=\"token plain-text\">>\n        &lt;input <\/span><span class=\"token punctuation\">{<\/span><span class=\"token operator\">...<\/span><span class=\"token function\">getInputProps<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><span class=\"token plain-text\"> \/>\n        <\/span><span class=\"token punctuation\">{<\/span><span class=\"token operator\">!<\/span>isDragActive <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token string\">'Click here or drop a file to upload!'<\/span><span class=\"token punctuation\">}<\/span><span class=\"token plain-text\">\n        <\/span><span class=\"token punctuation\">{<\/span>isDragActive <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token operator\">!<\/span>isDragReject <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token string\">\"Drop it like it's hot!\"<\/span><span class=\"token punctuation\">}<\/span><span class=\"token plain-text\">\n        <\/span><span class=\"token punctuation\">{<\/span>isDragReject <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token string\">\"File type not accepted, sorry!\"<\/span><span class=\"token punctuation\">}<\/span><span class=\"token plain-text\">\n        <\/span><span class=\"token punctuation\">{<\/span>isFileTooLarge <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token punctuation\">(<\/span>\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">className<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>text-danger mt-2<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n            File is too large.\n          <\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">><\/span><\/span>\n        <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><span class=\"token plain-text\">\n      <\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">><\/span><\/span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">><\/span><\/span>\n  <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\n\n<span class=\"token keyword\">export<\/span> <span class=\"token keyword\">default<\/span> App<span class=\"token punctuation\">;<\/span>\n<\/div><\/code><\/pre><\/div><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Showing a List of Accepted Files<\/h2>\n\n\n\n<p>One nice touch we could add to our react dropzone component is to see a list of accepted files before we upload them. It&#8217;s a nice bit of UX that goes a long way to adding to the experience.<\/p>\n\n\n\n<p>The useDropzone Hook provides us a variable, <strong class=\"\">a<\/strong><strong>cceptedFiles<\/strong>, which is an array of File objects. We could map through that array and display a list of all the files that are ready to be uploaded:<\/p>\n\n\n\n<div class=\"wp-block-cgb-block-codeplus\"><div class=\"upmostly-block better-code-block\"><div class=\"dark\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><div><span class=\"token operator\">...<\/span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>ul<\/span> <span class=\"token attr-name\">className<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>list-group mt-2<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n  <\/span><span class=\"token punctuation\">{<\/span>acceptedFiles<span class=\"token punctuation\">.<\/span>length <span class=\"token operator\">><\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">&amp;&amp;<\/span> acceptedFiles<span class=\"token punctuation\">.<\/span><span class=\"token function\">map<\/span><span class=\"token punctuation\">(<\/span>acceptedFile <span class=\"token operator\">=><\/span> <span class=\"token punctuation\">(<\/span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>li<\/span> <span class=\"token attr-name\">className<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>list-group-item list-group-item-success<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">><\/span><\/span><span class=\"token plain-text\">\n      <\/span><span class=\"token punctuation\">{<\/span>acceptedFile<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">}<\/span><span class=\"token plain-text\">\n    <\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>li<\/span><span class=\"token punctuation\">><\/span><\/span>\n  <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><span class=\"token plain-text\">\n<\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>ul<\/span><span class=\"token punctuation\">><\/span><\/span>\n\n<span class=\"token operator\">...<\/span><\/div><\/code><\/pre><\/div><\/div><\/div>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"230\" src=\"http:\/\/upmostly.com\/wp-content\/uploads\/react-dropzone-accepted-files.gif\" alt=\"A react app, built using the react dropzone library showing someone dragging a file and dropping it on a react dropzone area.\" class=\"wp-image-1200\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Wrapping Up<\/h2>\n\n\n\n<p>There you have it! A simple file picker component built using React Dropzone. If you enjoyed the tutorial or ran into any issues, don&#8217;t forget to leave a comment below.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this tutorial, we&#8217;ll learn how to use React Dropzone to create an awesome file uploader. Keep reading to learn more about react-dropzone.<\/p>\n","protected":false},"author":8,"featured_media":600,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[33,40,4,41],"class_list":["post-560","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-beginner-react-tutorials","tag-popular-tutorials","tag-react","tag-react-file-upload"],"acf":[],"_links":{"self":[{"href":"https:\/\/upmostly.com\/wp-json\/wp\/v2\/posts\/560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/upmostly.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/upmostly.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/upmostly.com\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/upmostly.com\/wp-json\/wp\/v2\/comments?post=560"}],"version-history":[{"count":3,"href":"https:\/\/upmostly.com\/wp-json\/wp\/v2\/posts\/560\/revisions"}],"predecessor-version":[{"id":3353,"href":"https:\/\/upmostly.com\/wp-json\/wp\/v2\/posts\/560\/revisions\/3353"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/upmostly.com\/wp-json\/wp\/v2\/media\/600"}],"wp:attachment":[{"href":"https:\/\/upmostly.com\/wp-json\/wp\/v2\/media?parent=560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/upmostly.com\/wp-json\/wp\/v2\/categories?post=560"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/upmostly.com\/wp-json\/wp\/v2\/tags?post=560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}