{"meta":"<h2 id=\"Develop Guide\">Develop Guide <a class=\"header-anchor scroll-count-item\" href=\"#Develop Guide\" data-scroll-id=\"Develop Guide\">#</a></h2>\n<h3 id=\"When To Use\">When to Use <a class=\"header-anchor scroll-count-item\" href=\"#When To Use\" data-scroll-id=\"When To Use\">#</a></h3>\n<p>When user want to upload some file to server side or cloud storage, upload component could help user deal with it.</p>\n","api":"<h2 id=\"API\">API <a class=\"header-anchor scroll-count-item\" href=\"#API\" data-scroll-id=\"API\">#</a></h2>\n<h3 id=\"Upload\">Upload <a class=\"header-anchor scroll-count-item\" href=\"#Upload\" data-scroll-id=\"Upload\">#</a></h3>\n<table>\n<thead>\n<tr>\n<th>Param</th>\n<th>Description</th>\n<th>Type</th>\n<th>Default Value</th>\n<th>Required</th>\n<th>Supported Version</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>action</td>\n<td>Upload address</td>\n<td>string</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>shape</td>\n<td>Upload button shape</td>\n<td>&apos;card&apos;</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>accept</td>\n<td>Accepted file types, see [input accept attribute](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input#attr</td>\n<td>string</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>data</td>\n<td>Upload extra parameters</td>\n<td>| { [key: string]: string | Blob }<br> | ((file: UploadFile) =&gt; { [key: string]: string | Blob })</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>headers</td>\n<td>Set the request header</td>\n<td>{<br> &apos;X-Requested-With&apos;?: string | undefined;<br> [key: string]: unknown;<br> }</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>withCredentials</td>\n<td>Whether to allow requests to carry cookies</td>\n<td>boolean</td>\n<td>true</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>beforeUpload</td>\n<td>Optional parameters, see <a href=\"#beforeUpload\">beforeUpload</a><br><br><strong>signature</strong>:<br><strong>params</strong>:<br><em>file</em>: All file<br><em>options</em>: Parameters</td>\n<td>(file: UploadFile, options: BeforeUploadOption) =&gt; boolean | object | unknown</td>\n<td>func.noop</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>onProgress</td>\n<td>OnProgress Callback</td>\n<td>(file: ObjectFile[], e: ObjectFile) =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>onSuccess</td>\n<td>Optional parameters, upload success callback function, the parameter is the response information and file<br><br><strong>signature</strong>:<br><strong>params</strong>:<br><em>file</em>: File<br><em>value</em>: Value</td>\n<td>(file: ObjectFile, value?: ObjectFile[]) =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>onError</td>\n<td>Optional parameters, upload failure callback function, the parameter is the upload failure information, response information and file<br><br><strong>signature</strong>:<br><strong>params</strong>:<br><em>file</em>: Error file<br><em>value</em>: Current value</td>\n<td>(file: ObjectFile, value: ObjectFile[]) =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>Child elements</td>\n<td>ReactNode</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>timeout</td>\n<td>Upload timeout, unit ms</td>\n<td>number</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>method</td>\n<td>Upload method</td>\n<td>&apos;post&apos; | &apos;put&apos; | &apos;POST&apos; | &apos;PUT&apos;</td>\n<td>&apos;post&apos;</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>request</td>\n<td>Custom upload method<br><br><strong>signature</strong>:<br><strong>params</strong>:<br><em>option</em>: Parameters<br><strong>return</strong>:<br>Object with abort method</td>\n<td>(option: object) =&gt; object</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>name</td>\n<td>File name field</td>\n<td>string</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>onSelect</td>\n<td>Select file callback</td>\n<td>(uploadFiles: Array&lt;unknown&gt;, value: Array&lt;unknown&gt;) =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>onDrop</td>\n<td>Drop file</td>\n<td>(files: UploadFile[]) =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>value</td>\n<td>File list</td>\n<td>Array&lt;ObjectFile&gt; | ObjectFile</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>defaultValue</td>\n<td>Default file list</td>\n<td>Array&lt;ObjectFile&gt; | ObjectFile</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>listType</td>\n<td>Upload list style</td>\n<td>ListType</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>formatter</td>\n<td>Data formatting function, used with custom action, the parameter is the response data of the server, see <a href=\"#formater\">formatter</a><br><br><strong>signature</strong>:<br><strong>params</strong>:<br><em>response</em>: Return<br><em>file</em>: File object</td>\n<td>(response: UploadResponse, file: UploadFile) =&gt; UploadResponse</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>limit</td>\n<td>Maximum number of file uploads</td>\n<td>number</td>\n<td>Infinity</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>dragable</td>\n<td>Optional parameters, whether to support drag and drop upload, <code>ie10+</code> supports.</td>\n<td>boolean</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>useDataURL</td>\n<td>Optional parameters, whether to locally preview</td>\n<td>boolean</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>disabled</td>\n<td>Optional parameters, whether to disable upload</td>\n<td>boolean</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>onChange</td>\n<td>Upload file change status<br><br><strong>signature</strong>:<br><strong>params</strong>:<br><em>value</em>: Value<br><em>file</em>: File object</td>\n<td>(value: ObjectFile[], file: ObjectFile | ObjectFile[]) =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>afterSelect</td>\n<td>Optional parameters, used to validate files, afterSelect only takes effect when autoUpload=false, autoUpload=true can be used to replace this function<br><br><strong>signature</strong>:<br><strong>params</strong>:<br><em>file</em>: File<br><strong>return</strong>:<br>Return false will block upload, other means normal</td>\n<td>(file: ObjectFile) =&gt; boolean | Promise&lt;void&gt;</td>\n<td>func.noop</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>onRemove</td>\n<td>Remove file callback function<br><br><strong>signature</strong>:<br><strong>params</strong>:<br><em>file</em>: File<br><strong>return</strong>:<br>Return false&#x3001;Promise.resolve(false)&#x3001;Promise.reject() will block file deletion</td>\n<td>(file: object) =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>autoUpload</td>\n<td>Automatic upload</td>\n<td>boolean</td>\n<td>true</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>progressProps</td>\n<td>Pass to Progress props</td>\n<td>ProgressProps</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>isPreview</td>\n<td>Is preview</td>\n<td>boolean</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>renderPreview</td>\n<td>Preview mode<br><br><strong>signature</strong>:<br><strong>params</strong>:<br><em>value</em>: File</td>\n<td>(value: ObjectFile | ObjectFile[], props: UploadProps) =&gt; void</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>fileKeyName</td>\n<td>File object key name</td>\n<td>string</td>\n<td>-</td>\n<td></td>\n<td>1.21</td>\n</tr>\n<tr>\n<td>fileNameRender</td>\n<td>Custom file name rendering<br><br><strong>signature</strong>:<br><strong>params</strong>:<br><em>file</em>: File<br><strong>return</strong>:<br>React node</td>\n<td>(file: object) =&gt; ReactNode</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>actionRender</td>\n<td>Custom operation area rendering<br><br><strong>signature</strong>:<br><strong>params</strong>:<br><em>file</em>: File<br><strong>return</strong>:<br>React node</td>\n<td>(file: ObjectFile) =&gt; ReactNode</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>previewOnFileName</td>\n<td>Click file name</td>\n<td>boolean</td>\n<td>-</td>\n<td></td>\n<td>1.24</td>\n</tr>\n<tr>\n<td>itemRender</td>\n<td>Customize success and failure list rendering, only in listType is card or image</td>\n<td>(file: UploadFile, action?: { remove?: () =&gt; void }) =&gt; ReactNode</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>reUpload</td>\n<td>Select new file upload and replace</td>\n<td>boolean</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"Upload Card\">Upload.Card <a class=\"header-anchor scroll-count-item\" href=\"#Upload Card\" data-scroll-id=\"Upload Card\">#</a></h3>\n<p>&#x7EE7;&#x627F; Upload &#x7684; API&#xFF0C;&#x9664;&#x975E;&#x7279;&#x522B;&#x8BF4;&#x660E;</p>\n<p>Inheritance Upload API, unless otherwise specified</p>\n<table>\n<thead>\n<tr>\n<th>Param</th>\n<th>Description</th>\n<th>Type</th>\n<th>Default Value</th>\n<th>Required</th>\n<th>Supported Version</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>onPreview</td>\n<td>Click image callback</td>\n<td>(file: ObjectFile, e?: MouseEvent&lt;HTMLElement&gt;) =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>onChange</td>\n<td>Change callback</td>\n<td>(value: UploadFile[], file: UploadFile) =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>onRemove</td>\n<td>Click remove callback</td>\n<td>(file: object) =&gt; void</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>onCancel</td>\n<td>Cancel upload callback</td>\n<td>() =&gt; void</td>\n<td>-</td>\n<td></td>\n<td>-</td>\n</tr>\n<tr>\n<td>itemRender</td>\n<td>Customize success and failure list rendering&#xFF0C;only in listType is card or image<br><br><strong>signature</strong>:<br><strong>params</strong>:<br><em>file</em>: File object<br><em>action</em>: Contains properties remove: delete callback</td>\n<td>(file: ObjectFile, action?: { remove?: () =&gt; void }) =&gt; ReactNode</td>\n<td>-</td>\n<td></td>\n<td>1.21</td>\n</tr>\n<tr>\n<td>reUpload</td>\n<td>Select new file upload and replace</td>\n<td>boolean</td>\n<td>-</td>\n<td></td>\n<td>1.24</td>\n</tr>\n<tr>\n<td>showDownload</td>\n<td>Show download button</td>\n<td>boolean</td>\n<td>true</td>\n<td></td>\n<td>1.24</td>\n</tr>\n<tr>\n<td>onProgress</td>\n<td>OnProgress Callback</td>\n<td>(file: UploadFile[], e: UploadFile) =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"Upload Dragger\">Upload.Dragger <a class=\"header-anchor scroll-count-item\" href=\"#Upload Dragger\" data-scroll-id=\"Upload Dragger\">#</a></h3>\n<p>IE10+ &#x652F;&#x6301;&#x3002;&#x7EE7;&#x627F; Upload &#x7684; API&#xFF0C;&#x9664;&#x975E;&#x7279;&#x522B;&#x8BF4;&#x660E;</p>\n<p>IE10+ supports. Inheritance Upload API, unless otherwise specified</p>\n<h3 id=\"Upload Selecter\">Upload.Selecter <a class=\"header-anchor scroll-count-item\" href=\"#Upload Selecter\" data-scroll-id=\"Upload Selecter\">#</a></h3>\n<p>[&#x5E95;&#x5C42;&#x80FD;&#x529B;] &#x53EF;&#x81EA;&#x5B9A;&#x4E49;&#x6837;&#x5F0F;&#x7684;&#x6587;&#x4EF6;&#x9009;&#x62E9;&#x5668;</p>\n<p>[Underlying capabilities] Customizable file selector</p>\n<table>\n<thead>\n<tr>\n<th>Param</th>\n<th>Description</th>\n<th>Type</th>\n<th>Default Value</th>\n<th>Required</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>disabled</td>\n<td>Whether to disable upload</td>\n<td>boolean</td>\n<td>-</td>\n<td></td>\n</tr>\n<tr>\n<td>multiple</td>\n<td>Whether to support multiple file selection, <code>ie10+</code> supports</td>\n<td>boolean</td>\n<td>false</td>\n<td></td>\n</tr>\n<tr>\n<td>webkitdirectory</td>\n<td>Whether to support upload folder, only in chrome</td>\n<td>boolean</td>\n<td>-</td>\n<td></td>\n</tr>\n<tr>\n<td>capture</td>\n<td>Call system device media</td>\n<td>string</td>\n<td>-</td>\n<td></td>\n</tr>\n<tr>\n<td>dragable</td>\n<td>Whether to support drag and drop upload, <code>ie10+</code> supports</td>\n<td>boolean</td>\n<td>-</td>\n<td></td>\n</tr>\n<tr>\n<td>accept</td>\n<td>Accepted file types</td>\n<td>string</td>\n<td>-</td>\n<td></td>\n</tr>\n<tr>\n<td>onSelect</td>\n<td>File selection callback</td>\n<td>(e: UploadFile[]) =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n</tr>\n<tr>\n<td>onDragOver</td>\n<td>Drag over callback</td>\n<td>(e: DragEvent&lt;HTMLInputElement&gt;) =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n</tr>\n<tr>\n<td>onDragLeave</td>\n<td>Drag leave callback</td>\n<td>() =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n</tr>\n<tr>\n<td>onDrop</td>\n<td>Drag complete callback</td>\n<td>(fiels: File[]) =&gt; void</td>\n<td>func.noop</td>\n<td></td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"Method\">Method <a class=\"header-anchor scroll-count-item\" href=\"#Method\" data-scroll-id=\"Method\">#</a></h2>\n<h3 id=\"Upload Uploader\">Upload.Uploader <a class=\"header-anchor scroll-count-item\" href=\"#Upload Uploader\" data-scroll-id=\"Upload Uploader\">#</a></h3>\n<blockquote>\n<p>[Basic Ability] File Upload Core Ability\nlet uploader = new Upload.Uploader([options]);</p>\n</blockquote>\n<h4>options</h4>\n<table>\n<thead>\n<tr>\n<th>Param</th>\n<th>Descripiton</th>\n<th>Type</th>\n<th>Default Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>action</td>\n<td>upload url</td>\n<td>String</td>\n<td>-</td>\n</tr>\n<tr>\n<td>data</td>\n<td>extra upload data</td>\n<td>Object/Function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>headers</td>\n<td>upload request headers</td>\n<td>Object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>withCredentials</td>\n<td>Allow request with cookie or not</td>\n<td>Boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>onProgress</td>\n<td>callback when upload progress change<br><br>signature:<br>Function() =&gt; void</td>\n<td>Function</td>\n<td>noop</td>\n</tr>\n<tr>\n<td>onSuccess</td>\n<td>callback when upload success<br><br>signature:<br>Function() =&gt; void</td>\n<td>Function</td>\n<td>noop</td>\n</tr>\n<tr>\n<td>onError</td>\n<td>callback when upload failed<br><br>signature:<br>Function() =&gt; void</td>\n<td>Function</td>\n<td>noop</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"Custom Request\">Custom Request <a class=\"header-anchor scroll-count-item\" href=\"#Custom Request\" data-scroll-id=\"Custom Request\">#</a></h3>\n<p>&#x67D0;&#x4E9B;&#x573A;&#x666F;&#x4E0B;&#x9700;&#x8981;&#x81EA;&#x5B9A;&#x4E49;Request,&#x4F8B;&#x5982;&#x5BF9;&#x63A5;AWS S3 jd-sdk or aliyun oss sdk. Upload &#x652F;&#x6301; &#x4F20;&#x5165;&#x81EA;&#x5B9A;&#x4E49;&#x7684; request&#x65B9;&#x6CD5;.\nUnder some circumstances, a developer may want to overriding default request call method&#xFF0C; just like using AWS S3 jd-sdk or aliyun oss sdk. Upload has a prop named request.</p>\n<pre><code>function customRequest(option) {\n    /* coding here */\n    return {abort() {/* coding here */}};\n}\n\n&lt;Upload request={customRequest}/&gt;\n</code></pre>\n<p>a object named &apos;option&apos; will be pass into customRequest method and it&apos;s schema:</p>\n<pre><code>    onProgress: (event: { percent: number }): void\n    onError: (event: Error, body?: Object): void\n    onSuccess: (body: Object): void\n    data: Object // &#x989D;&#x5916;&#x7684;&#x6570;&#x636E;\n    filename: String // &#x6587;&#x4EF6;&#x540D;\n    file: File // &#x539F;&#x751F;File&#x5BF9;&#x8C61;\n    withCredentials: Boolean // &#x662F;&#x5426;&#x643A;&#x5E26;cookie\n    action: String // &#x8BF7;&#x6C42;&#x5730;&#x5740;\n    method: String // &#x8BF7;&#x6C42;&#x7C7B;&#x578B; post/put\n    timeout: Number // &#x8D85;&#x65F6;\n    headers: Object // &#x8BF7;&#x6C42;&#x5934;\n</code></pre>\n<p>customRequest should return a object with a abort method which can abort a request</p>\n<pre><code>abort(file?: File) =&gt; void: abort the uploading file\n</code></pre>\n<p>customRequest implements reference: https://github.com/alibaba-fusion/next/blob/master/src/upload/runtime/request.jsx</p>\n<h3 id=\"Error Code\">ErrorCode <a class=\"header-anchor scroll-count-item\" href=\"#Error Code\" data-scroll-id=\"Error Code\">#</a></h3>\n<table>\n<thead>\n<tr>\n<th>ErrorCode</th>\n<th>description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>EXCEED_LIMIT</td>\n<td>when limit is set , selected files number + uploaded files number &gt; limit</td>\n</tr>\n<tr>\n<td>BEFOREUPLOAD_REJECT</td>\n<td>BeforeUpload method returns false/Promise.resolve(false)/Promise.reject()</td>\n</tr>\n<tr>\n<td>RESPONSE_FAIL</td>\n<td>Response Error</td>\n</tr>\n</tbody>\n</table>\n<p>All the ErrorCode in <code>Upload.ErrorCode</code>.</p>\n<h3 id=\"On Change Return Data Schema\">onChange Return Data Schema <a class=\"header-anchor scroll-count-item\" href=\"#On Change Return Data Schema\" data-scroll-id=\"On Change Return Data Schema\">#</a></h3>\n<pre><code>    {\n      uid: &apos;uid&apos;,       // file unique ID\n      name: &apos;xx.png&apos;    // filename\n      state: &apos;done&apos;,    // selected uploading done error\n      response: {&quot;success&quot;:true}  // server response\n      url: &apos;https://img.alicdn.com/tps/TB19O79MVXXXXcZXVXXXXXXXXXX-1024-1024.jpg&apos;,\n      imgURL: &apos;https://img.alicdn.com/tps/TB19O79MVXXXXcZXVXXXXXXXXXX-1024-1024.jpg&apos;, //optional\n      downloadURL: &apos;https://img.alicdn.com/tps/TB19O79MVXXXXcZXVXXXXXXXXXX-1024-1024.jpg&apos; // optional\n    }\n</code></pre>\n<h3 id=\"API Response Data Schema\">API Response Data Schema <a class=\"header-anchor scroll-count-item\" href=\"#API Response Data Schema\" data-scroll-id=\"API Response Data Schema\">#</a></h3>\n<pre><code>    {\n      &quot;success&quot;: true,\n      &quot;message&quot;: &quot;upload success&quot;,                           // display when success=false\n      &quot;url&quot;: &quot;https://img.alicdn.com/tps/TB19O79MVXXXXcZXVXXXXXXXXXX-1024-1024.jpg&quot;             // file url\n      &quot;imgURL&quot;: &quot;https://img.alicdn.com/tps/TB19O79MVXXXXcZXVXXXXXXXXXX-1024-1024.jpg&quot;,         // file preview url(optional)\n      &quot;downloadURL&quot;: &quot;https://img.alicdn.com/tps/TB19O79MVXXXXcZXVXXXXXXXXXX-1024-1024.jpg&quot;,    // file download url(optional)\n    }\n</code></pre>\n<h3 id=\"Server Side Response Format\">Server Side Response Format <a class=\"header-anchor scroll-count-item\" href=\"#Server Side Response Format\" data-scroll-id=\"Server Side Response Format\">#</a></h3>\n<p>Use <code>formatter</code> to transfer nonstandard data to standard data</p>\n<ul>\n<li>\n<p><code>Assume</code> Server returns such data</p>\n<pre><code>{\n  &quot;status&quot;: &quot;success&quot;,\n  &quot;img_src&quot;: &quot;https://img.alicdn.com/tps/TB19O79MVXXXXcZXVXXXXXXXXXX-1024-1024.jpg&quot;,\n}\n</code></pre>\n</li>\n<li>\n<p>transfer it</p>\n<pre><code>&lt;Upload\n  action=&quot;http://127.0.0.1:3001/upload&quot;\n  formatter={(res) =&gt; {\n    // check the res &amp; return standard data\n    return {\n      success: res.status === &apos;success&apos;,\n      url: res.img_src,\n    }\n  }}\n/&gt;\n</code></pre>\n</li>\n</ul>\n<h2 id=\"Server Side Code Example\">Server side code example <a class=\"header-anchor scroll-count-item\" href=\"#Server Side Code Example\" data-scroll-id=\"Server Side Code Example\">#</a></h2>\n<p>Next Upload components upload files by sending <code>multipart/form-data</code> type request.</p>\n<p>It is no doubt that every kind of server side framework can deal with <code>multipart/form-data</code> type request and extract files from request body. Now we give out 2 examples</p>\n<ul>\n<li><a href=\"https://github.com/alibaba-fusion/next-upload-java-server\">Java Springboot</a></li>\n<li><a href=\"https://github.com/alibaba-fusion/next-upload-node-server\">Node Eggjs</a></li>\n</ul>\n<h2 id=\"IE 9 Compatibility\">IE9 Compatibility <a class=\"header-anchor scroll-count-item\" href=\"#IE 9 Compatibility\" data-scroll-id=\"IE 9 Compatibility\">#</a></h2>\n<ul>\n<li>when enviroment &lt; ie9, we use iframe as a no-refresh page upload solution, So You must keep the upload url domain and your page url domain the same.</li>\n<li>when enviroment &lt; ie9, Server side response header, <code>context-type</code> must be <code>text/html</code>, and never be <code>application/json</code></li>\n<li>if only top-level domains the same&#xFF08;<code>taobao.com</code>: top-level domain <code>shop.taobao.com</code>: second-level domain), you can use methods below to upload file&#x3002;</li>\n</ul>\n<p>Assume that your form page url domain&#xFF1A;shop.taobao.com, while the file server url is upload.taobao.com. Server side should return data with a extra script tag</p>\n<pre><code>    &lt;script&gt;document.domain=&quot;taobao.com&quot;;&lt;/script&gt;\n    {&quot;status&quot;:1,&quot;type&quot;:&quot;ajax&quot;,&quot;name&quot;:&quot;54.png&quot;,&quot;url&quot;:&quot;.\\/files\\/54.png&quot;}\n</code></pre>\n<p>iframe upload will request with a param <code>_documentDomain</code>. You can set your domain</p>\n<h2 id=\"ARIA And Key Board\">ARIA and KeyBoard <a class=\"header-anchor scroll-count-item\" href=\"#ARIA And Key Board\" data-scroll-id=\"ARIA And Key Board\">#</a></h2>\n<table>\n<thead>\n<tr>\n<th style=\"text-align:left\">KeyBoard</th>\n<th style=\"text-align:left\">Descripiton</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td style=\"text-align:left\">Enter</td>\n<td style=\"text-align:left\">1. When the component gets the focus, press <code>Enter</code> to select the file upload 2. Delete uploaded image</td>\n</tr>\n</tbody>\n</table>\n"}