/*! For license information please see 2689.605cd443.js.LICENSE.txt */ (self.webpackChunk=self.webpackChunk||[]).push([["2689"],{1171:function(s,n,a){"use strict";a.r(n);var t=a("80681");let e=["innerHTML"];n.default={setup:()=>({html:""}),render:()=>((0,t.wg)(),(0,t.iD)("div",{class:"van-doc-markdown-body",innerHTML:'
\u7528\u4E8E\u5C06\u672C\u5730\u7684\u56FE\u7247\u6216\u6587\u4EF6\u4E0A\u4F20\u81F3\u670D\u52A1\u5668\uFF0C\u5E76\u5728\u4E0A\u4F20\u8FC7\u7A0B\u4E2D\u5C55\u793A\u9884\u89C8\u56FE\u548C\u4E0A\u4F20\u8FDB\u5EA6\u3002\u76EE\u524D Uploader \u7EC4\u4EF6\u4E0D\u5305\u542B\u5C06\u6587\u4EF6\u4E0A\u4F20\u81F3\u670D\u52A1\u5668\u7684\u63A5\u53E3\u903B\u8F91\uFF0C\u8BE5\u6B65\u9AA4\u9700\u8981\u81EA\u884C\u5B9E\u73B0\u3002
\n\u901A\u8FC7\u4EE5\u4E0B\u65B9\u5F0F\u6765\u5168\u5C40\u6CE8\u518C\u7EC4\u4EF6\uFF0C\u66F4\u591A\u6CE8\u518C\u65B9\u5F0F\u8BF7\u53C2\u8003\u7EC4\u4EF6\u6CE8\u518C\u3002
\nimport { createApp } from 'vue';\nimport { Uploader } from 'vant';\n\nconst app = createApp();\napp.use(Uploader);\n
\n\u6587\u4EF6\u4E0A\u4F20\u5B8C\u6BD5\u540E\u4F1A\u89E6\u53D1 after-read
\u56DE\u8C03\u51FD\u6570\uFF0C\u83B7\u53D6\u5230\u5BF9\u5E94\u7684 file
\u5BF9\u8C61\u3002
<van-uploader :after-read="afterRead" />\n
\nexport default {\n setup() {\n const afterRead = (file) => {\n // \u6B64\u65F6\u53EF\u4EE5\u81EA\u884C\u5C06\u6587\u4EF6\u4E0A\u4F20\u81F3\u670D\u52A1\u5668\n console.log(file);\n };\n\n return {\n afterRead,\n };\n },\n};\n
\n\u901A\u8FC7 v-model
\u53EF\u4EE5\u7ED1\u5B9A\u5DF2\u7ECF\u4E0A\u4F20\u7684\u6587\u4EF6\u5217\u8868\uFF0C\u5E76\u5C55\u793A\u6587\u4EF6\u5217\u8868\u7684\u9884\u89C8\u56FE\u3002
<van-uploader v-model="fileList" multiple />\n
\nimport { ref } from 'vue';\n\nexport default {\n setup() {\n const fileList = ref([\n { url: 'https://fastly.jsdelivr.net/npm/@vant/assets/leaf.jpeg' },\n // Uploader \u6839\u636E\u6587\u4EF6\u540E\u7F00\u6765\u5224\u65AD\u662F\u5426\u4E3A\u56FE\u7247\u6587\u4EF6\n // \u5982\u679C\u56FE\u7247 URL \u4E2D\u4E0D\u5305\u542B\u7C7B\u578B\u4FE1\u606F\uFF0C\u53EF\u4EE5\u6DFB\u52A0 isImage \u6807\u8BB0\u6765\u58F0\u660E\n { url: 'https://cloud-image', isImage: true },\n ]);\n\n return {\n fileList,\n };\n },\n};\n
\n\u901A\u8FC7 status
\u5C5E\u6027\u53EF\u4EE5\u6807\u8BC6\u4E0A\u4F20\u72B6\u6001\uFF0Cuploading
\u8868\u793A\u4E0A\u4F20\u4E2D\uFF0Cfailed
\u8868\u793A\u4E0A\u4F20\u5931\u8D25\uFF0Cdone
\u8868\u793A\u4E0A\u4F20\u5B8C\u6210\u3002
<van-uploader v-model="fileList" :after-read="afterRead" />\n
\nimport { ref } from 'vue';\n\nexport default {\n setup() {\n const fileList = ref([\n {\n url: 'https://fastly.jsdelivr.net/npm/@vant/assets/leaf.jpeg',\n status: 'uploading',\n message: '\u4E0A\u4F20\u4E2D...',\n },\n {\n url: 'https://fastly.jsdelivr.net/npm/@vant/assets/tree.jpeg',\n status: 'failed',\n message: '\u4E0A\u4F20\u5931\u8D25',\n },\n ]);\n\n const afterRead = (file) => {\n file.status = 'uploading';\n file.message = '\u4E0A\u4F20\u4E2D...';\n\n setTimeout(() => {\n file.status = 'failed';\n file.message = '\u4E0A\u4F20\u5931\u8D25';\n }, 1000);\n };\n\n return {\n fileList,\n afterRead,\n };\n },\n};\n
\n\u901A\u8FC7 max-count
\u5C5E\u6027\u53EF\u4EE5\u9650\u5236\u4E0A\u4F20\u6587\u4EF6\u7684\u6570\u91CF\uFF0C\u4E0A\u4F20\u6570\u91CF\u8FBE\u5230\u9650\u5236\u540E\uFF0C\u4F1A\u81EA\u52A8\u9690\u85CF\u4E0A\u4F20\u533A\u57DF\u3002
<van-uploader v-model="fileList" multiple :max-count="2" />\n
\nimport { ref } from 'vue';\n\nexport default {\n setup() {\n const fileList = ref([]);\n\n return {\n fileList,\n };\n },\n};\n
\n\u901A\u8FC7 max-size
\u5C5E\u6027\u53EF\u4EE5\u9650\u5236\u4E0A\u4F20\u6587\u4EF6\u7684\u5927\u5C0F\uFF0C\u8D85\u8FC7\u5927\u5C0F\u7684\u6587\u4EF6\u4F1A\u88AB\u81EA\u52A8\u8FC7\u6EE4\uFF0C\u8FD9\u4E9B\u6587\u4EF6\u4FE1\u606F\u53EF\u4EE5\u901A\u8FC7 oversize
\u4E8B\u4EF6\u83B7\u53D6\u3002
<van-uploader multiple :max-size="500 * 1024" @oversize="onOversize" />\n
\nimport { showToast } from 'vant';\n\nexport default {\n setup() {\n const onOversize = (file) => {\n console.log(file);\n showToast('\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7 500kb');\n };\n\n return {\n onOversize,\n };\n },\n};\n
\n\u5982\u679C\u9700\u8981\u9488\u5BF9\u4E0D\u540C\u7C7B\u578B\u7684\u6587\u4EF6\u6765\u4F5C\u51FA\u4E0D\u540C\u7684\u5927\u5C0F\u9650\u5236\uFF0C\u53EF\u4EE5\u5728 max-size
\u5C5E\u6027\u4E2D\u4F20\u5165\u4E00\u4E2A\u51FD\u6570\uFF0C\u5728\u51FD\u6570\u4E2D\u901A\u8FC7 file.type
\u533A\u5206\u6587\u4EF6\u7C7B\u578B\uFF0C\u8FD4\u56DE true
\u8868\u793A\u8D85\u51FA\u9650\u5236\uFF0Cfalse
\u8868\u793A\u672A\u8D85\u51FA\u9650\u5236\u3002
<van-uploader multiple :max-size="isOverSize" />\n
\nexport default {\n setup() {\n const isOverSize = (file) => {\n const maxSize = file.type === 'image/jpeg' ? 500 * 1024 : 1000 * 1024;\n return file.size >= maxSize;\n };\n return {\n isOverSize,\n };\n },\n};\n
\n\u901A\u8FC7\u9ED8\u8BA4\u63D2\u69FD\u53EF\u4EE5\u81EA\u5B9A\u4E49\u4E0A\u4F20\u533A\u57DF\u7684\u6837\u5F0F\u3002
\n<van-uploader>\n <van-button icon="plus" type="primary">\u4E0A\u4F20\u6587\u4EF6</van-button>\n</van-uploader>\n
\n\u901A\u8FC7 preview-cover
\u63D2\u69FD\u53EF\u4EE5\u81EA\u5B9A\u4E49\u8986\u76D6\u5728\u9884\u89C8\u533A\u57DF\u4E0A\u65B9\u7684\u5185\u5BB9\u3002
<van-uploader v-model="fileList">\n <template #preview-cover="{ file }">\n <div class="preview-cover van-ellipsis">{{ file.name }}</div>\n </template>\n</van-uploader>\n\n<style>\n .preview-cover {\n position: absolute;\n bottom: 0;\n box-sizing: border-box;\n width: 100%;\n padding: 4px;\n color: #fff;\n font-size: 12px;\n text-align: center;\n background: rgba(0, 0, 0, 0.3);\n }\n</style>\n
\n\u901A\u8FC7 preview-size
\u5C5E\u6027\u5B9A\u4E49\u9884\u89C8\u56FE\u548C\u4E0A\u4F20\u533A\u57DF\u7684\u5927\u5C0F\u3002
<!-- \u4E0D\u6307\u5B9A\u5355\u4F4D\uFF0C\u9ED8\u8BA4\u4E3A px -->\n<van-uploader v-model="fileList" preview-size="60" />\n<!-- \u6307\u5B9A\u5355\u4F4D\uFF0C\u652F\u6301 rem, vh, vw -->\n<van-uploader v-model="fileList" preview-size="5rem" />\n
\n\u5C06 preview-size
\u8BBE\u7F6E\u4E3A\u6570\u7EC4\u683C\u5F0F\uFF0C\u53EF\u4EE5\u5206\u522B\u8BBE\u7F6E\u5BBD\u9AD8\u3002\u6570\u7EC4\u7B2C\u4E00\u9879\u5BF9\u5E94\u5BBD\u5EA6\uFF0C\u6570\u7EC4\u7B2C\u4E8C\u9879\u5BF9\u5E94\u9AD8\u5EA6\u3002
<van-uploader v-model="fileList" :preview-size="[60, 40]" />\n
\n\u901A\u8FC7\u4F20\u5165 beforeRead
\u51FD\u6570\u53EF\u4EE5\u5728\u4E0A\u4F20\u524D\u8FDB\u884C\u6821\u9A8C\u548C\u5904\u7406\uFF0C\u8FD4\u56DE true
\u8868\u793A\u6821\u9A8C\u901A\u8FC7\uFF0C\u8FD4\u56DE false
\u8868\u793A\u6821\u9A8C\u5931\u8D25\u3002\u652F\u6301\u8FD4\u56DE Promise
\u5BF9 file \u5BF9\u8C61\u8FDB\u884C\u81EA\u5B9A\u4E49\u5904\u7406\uFF0C\u4F8B\u5982\u538B\u7F29\u56FE\u7247\u3002
<van-uploader :before-read="beforeRead" />\n
\nimport { showToast } from 'vant';\n\nexport default {\n setup() {\n // \u8FD4\u56DE\u5E03\u5C14\u503C\n const beforeRead = (file) => {\n if (file.type !== 'image/jpeg') {\n showToast('\u8BF7\u4E0A\u4F20 jpg \u683C\u5F0F\u56FE\u7247');\n return false;\n }\n return true;\n };\n\n // \u8FD4\u56DE Promise\n const asyncBeforeRead = (file) =>\n new Promise((resolve, reject) => {\n if (file.type !== 'image/jpeg') {\n showToast('\u8BF7\u4E0A\u4F20 jpg \u683C\u5F0F\u56FE\u7247');\n reject();\n } else {\n const img = new File(['foo'], 'bar.jpg', {\n type: 'image/jpeg',\n });\n resolve(img);\n }\n });\n\n return {\n beforeRead,\n asyncBeforeRead,\n };\n },\n};\n
\n\u901A\u8FC7 disabled
\u5C5E\u6027\u7981\u7528\u6587\u4EF6\u4E0A\u4F20\u3002
<van-uploader disabled />\n
\n\u5728 v-model
\u6570\u7EC4\u4E2D\u8BBE\u7F6E\u5355\u4E2A\u9884\u89C8\u56FE\u7247\u5C5E\u6027\uFF0C\u652F\u6301 imageFit
deletable
previewSize
beforeDelete
\u3002
<van-uploader v-model="fileList" :deletable="false" />\n
\nimport { ref } from 'vue';\nimport { showToast } from 'vant';\n\nexport default {\n setup() {\n const fileList = ref([\n {\n url: 'https://fastly.jsdelivr.net/npm/@vant/assets/sand.jpeg',\n deletable: true,\n beforeDelete: () => {\n showToast('\u5220\u9664\u524D\u7F6E\u5904\u7406');\n },\n },\n {\n url: 'https://fastly.jsdelivr.net/npm/@vant/assets/tree.jpeg',\n imageFit: 'contain',\n },\n ]);\n\n return { fileList };\n },\n};\n
\n<van-uploader v-model="fileList" reupload max-count="2" />\n
\nimport { ref } from 'vue';\n\nexport default {\n setup() {\n const fileList = ref([\n { url: 'https://fastly.jsdelivr.net/npm/@vant/assets/leaf.jpeg' },\n ]);\n\n return { fileList };\n },\n};\n
\n\u53C2\u6570 | \n\u8BF4\u660E | \n\u7C7B\u578B | \n\u9ED8\u8BA4\u503C | \n
---|---|---|---|
v-model | \n\u5DF2\u4E0A\u4F20\u7684\u6587\u4EF6\u5217\u8868 | \nFileListItem[] | \n- | \n
accept | \n\u5141\u8BB8\u4E0A\u4F20\u7684\u6587\u4EF6\u7C7B\u578B\uFF0C\u8BE6\u7EC6\u8BF4\u660E | \nstring | \nimage/* | \n
name | \n\u6807\u8BC6\u7B26\uFF0C\u901A\u5E38\u4E3A\u4E00\u4E2A\u552F\u4E00\u7684\u5B57\u7B26\u4E32\u6216\u6570\u5B57\uFF0C\u53EF\u4EE5\u5728\u56DE\u8C03\u51FD\u6570\u7684\u7B2C\u4E8C\u9879\u53C2\u6570\u4E2D\u83B7\u53D6 | \nnumber | string | \n- | \n
preview-size | \n\u9884\u89C8\u56FE\u548C\u4E0A\u4F20\u533A\u57DF\u7684\u5C3A\u5BF8\uFF0C\u9ED8\u8BA4\u5355\u4F4D\u4E3A px | \nnumber | string | Array | \n80px | \n
preview-image | \n\u662F\u5426\u5728\u4E0A\u4F20\u5B8C\u6210\u540E\u5C55\u793A\u9884\u89C8\u56FE | \nboolean | \ntrue | \n
preview-full-image | \n\u662F\u5426\u5728\u70B9\u51FB\u9884\u89C8\u56FE\u540E\u5C55\u793A\u5168\u5C4F\u56FE\u7247\u9884\u89C8 | \nboolean | \ntrue | \n
preview-options | \n\u5168\u5C4F\u56FE\u7247\u9884\u89C8\u7684\u914D\u7F6E\u9879\uFF0C\u53EF\u9009\u503C\u89C1 ImagePreview | \nobject | \n- | \n
multiple | \n\u662F\u5426\u5F00\u542F\u56FE\u7247\u591A\u9009\uFF0C\u90E8\u5206\u5B89\u5353\u673A\u578B\u4E0D\u652F\u6301 | \nboolean | \nfalse | \n
disabled | \n\u662F\u5426\u7981\u7528\u6587\u4EF6\u4E0A\u4F20 | \nboolean | \nfalse | \n
readonly | \n\u662F\u5426\u5C06\u4E0A\u4F20\u533A\u57DF\u8BBE\u7F6E\u4E3A\u53EA\u8BFB\u72B6\u6001 | \nboolean | \nfalse | \n
deletable | \n\u662F\u5426\u5C55\u793A\u5220\u9664\u6309\u94AE | \nboolean | \ntrue | \n
reupload v4.4.0 | \n\u662F\u5426\u5F00\u542F\u8986\u76D6\u4E0A\u4F20\uFF0C\u5F00\u542F\u540E\u4F1A\u5173\u95ED\u56FE\u7247\u9884\u89C8 | \nboolean | \nfalse | \n
show-upload | \n\u662F\u5426\u5C55\u793A\u4E0A\u4F20\u533A\u57DF | \nboolean | \ntrue | \n
lazy-load | \n\u662F\u5426\u5F00\u542F\u56FE\u7247\u61D2\u52A0\u8F7D\uFF0C\u987B\u914D\u5408 Lazyload \u7EC4\u4EF6\u4F7F\u7528 | \nboolean | \nfalse | \n
capture | \n\u56FE\u7247\u9009\u53D6\u6A21\u5F0F\uFF0C\u53EF\u9009\u503C\u4E3A camera (\u76F4\u63A5\u8C03\u8D77\u6444\u50CF\u5934) | \nstring | \n- | \n
after-read | \n\u6587\u4EF6\u8BFB\u53D6\u5B8C\u6210\u540E\u7684\u56DE\u8C03\u51FD\u6570 | \nFunction | \n- | \n
before-read | \n\u6587\u4EF6\u8BFB\u53D6\u524D\u7684\u56DE\u8C03\u51FD\u6570\uFF0C\u8FD4\u56DE false \u53EF\u7EC8\u6B62\u6587\u4EF6\u8BFB\u53D6\uFF0C\u652F\u6301\u8FD4\u56DE Promise | \nFunction | \n- | \n
before-delete | \n\u6587\u4EF6\u5220\u9664\u524D\u7684\u56DE\u8C03\u51FD\u6570\uFF0C\u8FD4\u56DE false \u53EF\u7EC8\u6B62\u6587\u4EF6\u8BFB\u53D6\uFF0C\u652F\u6301\u8FD4\u56DE Promise | \nFunction | \n- | \n
max-size | \n\u6587\u4EF6\u5927\u5C0F\u9650\u5236\uFF0C\u5355\u4F4D\u4E3A byte | \nnumber | string | (file: File) => boolean | \nInfinity | \n
max-count | \n\u6587\u4EF6\u4E0A\u4F20\u6570\u91CF\u9650\u5236 | \nnumber | string | \nInfinity | \n
result-type | \n\u6587\u4EF6\u8BFB\u53D6\u7ED3\u679C\u7C7B\u578B\uFF0C\u53EF\u9009\u503C\u4E3A file text | \nstring | \ndataUrl | \n
upload-text | \n\u4E0A\u4F20\u533A\u57DF\u6587\u5B57\u63D0\u793A | \nstring | \n- | \n
image-fit | \n\u9884\u89C8\u56FE\u88C1\u526A\u6A21\u5F0F\uFF0C\u53EF\u9009\u503C\u89C1 Image \u7EC4\u4EF6 | \nstring | \ncover | \n
upload-icon | \n\u4E0A\u4F20\u533A\u57DF\u56FE\u6807\u540D\u79F0\u6216\u56FE\u7247\u94FE\u63A5\uFF0C\u7B49\u540C\u4E8E Icon \u7EC4\u4EF6\u7684 name \u5C5E\u6027 | \nstring | \nphotograph | \n
\n\n\u6CE8\u610F\uFF1Aaccept\u3001capture \u548C multiple \u4E3A\u6D4F\u89C8\u5668 input \u6807\u7B7E\u7684\u539F\u751F\u5C5E\u6027\uFF0C\u79FB\u52A8\u7AEF\u5404\u79CD\u673A\u578B\u5BF9\u8FD9\u4E9B\u5C5E\u6027\u7684\u652F\u6301\u7A0B\u5EA6\u6709\u6240\u5DEE\u5F02\uFF0C\u56E0\u6B64\u5728\u4E0D\u540C\u673A\u578B\u548C WebView \u4E0B\u53EF\u80FD\u51FA\u73B0\u4E00\u4E9B\u517C\u5BB9\u6027\u95EE\u9898\u3002
\n
\u4E8B\u4EF6\u540D | \n\u8BF4\u660E | \n\u56DE\u8C03\u53C2\u6570 | \n
---|---|---|
oversize | \n\u6587\u4EF6\u5927\u5C0F\u8D85\u8FC7\u9650\u5236\u65F6\u89E6\u53D1 | \n\u540C after-read | \n
click-upload | \n\u70B9\u51FB\u4E0A\u4F20\u533A\u57DF\u65F6\u89E6\u53D1 | \nevent: MouseEvent | \n
click-preview | \n\u70B9\u51FB\u9884\u89C8\u56FE\u65F6\u89E6\u53D1 | \n\u540C after-read | \n
click-reupload | \n\u70B9\u51FB\u8986\u76D6\u4E0A\u4F20\u65F6\u89E6\u53D1 | \n\u540C after-read | \n
close-preview | \n\u5173\u95ED\u5168\u5C4F\u56FE\u7247\u9884\u89C8\u65F6\u89E6\u53D1 | \n- | \n
delete | \n\u5220\u9664\u6587\u4EF6\u9884\u89C8\u65F6\u89E6\u53D1 | \n\u540C after-read | \n
\u540D\u79F0 | \n\u8BF4\u660E | \n\u53C2\u6570 | \n
---|---|---|
default | \n\u81EA\u5B9A\u4E49\u4E0A\u4F20\u533A\u57DF | \n- | \n
preview-delete | \n\u81EA\u5B9A\u4E49\u5220\u9664\u6309\u94AE | \n- | \n
preview-cover | \n\u81EA\u5B9A\u4E49\u8986\u76D6\u5728\u9884\u89C8\u533A\u57DF\u4E0A\u65B9\u7684\u5185\u5BB9 | \nitem: FileListItem | \n
before-read\u3001after-read\u3001before-delete \u6267\u884C\u65F6\u4F1A\u4F20\u9012\u4EE5\u4E0B\u56DE\u8C03\u53C2\u6570\uFF1A
\n\u53C2\u6570\u540D | \n\u8BF4\u660E | \n\u7C7B\u578B | \n
---|---|---|
file | \nfile \u5BF9\u8C61 | \nobject | \n
detail | \n\u989D\u5916\u4FE1\u606F\uFF0C\u5305\u542B name \u548C index \u5B57\u6BB5 | \nobject | \n
result-type
\u5B57\u6BB5\u8868\u793A\u6587\u4EF6\u8BFB\u53D6\u7ED3\u679C\u7684\u7C7B\u578B\uFF0C\u4E0A\u4F20\u5927\u6587\u4EF6\u65F6\uFF0C\u5EFA\u8BAE\u4F7F\u7528 file \u7C7B\u578B\uFF0C\u907F\u514D\u5361\u987F\u3002
\u503C | \n\u63CF\u8FF0 | \n
---|---|
file | \n\u7ED3\u679C\u4EC5\u5305\u542B File \u5BF9\u8C61 | \n
text | \n\u7ED3\u679C\u5305\u542B File \u5BF9\u8C61\uFF0C\u4EE5\u53CA\u6587\u4EF6\u7684\u6587\u672C\u5185\u5BB9 | \n
dataUrl | \n\u7ED3\u679C\u5305\u542B File \u5BF9\u8C61\uFF0C\u4EE5\u53CA\u6587\u4EF6\u5BF9\u5E94\u7684 base64 \u7F16\u7801 | \n
\u901A\u8FC7 ref \u53EF\u4EE5\u83B7\u53D6\u5230 Uploader \u5B9E\u4F8B\u5E76\u8C03\u7528\u5B9E\u4F8B\u65B9\u6CD5\uFF0C\u8BE6\u89C1\u7EC4\u4EF6\u5B9E\u4F8B\u65B9\u6CD5\u3002
\n\u65B9\u6CD5\u540D | \n\u8BF4\u660E | \n\u53C2\u6570 | \n\u8FD4\u56DE\u503C | \n
---|---|---|---|
closeImagePreview | \n\u5173\u95ED\u5168\u5C4F\u7684\u56FE\u7247\u9884\u89C8 | \n- | \n- | \n
chooseFile | \n\u4E3B\u52A8\u8C03\u8D77\u6587\u4EF6\u9009\u62E9\uFF0C\u7531\u4E8E\u6D4F\u89C8\u5668\u5B89\u5168\u9650\u5236\uFF0C\u53EA\u6709\u5728\u7528\u6237\u89E6\u53D1\u64CD\u4F5C\u7684\u4E0A\u4E0B\u6587\u4E2D\u8C03\u7528\u624D\u6709\u6548 | \n- | \n- | \n
\u7EC4\u4EF6\u5BFC\u51FA\u4EE5\u4E0B\u7C7B\u578B\u5B9A\u4E49\uFF1A
\nimport type {\n UploaderProps,\n UploaderInstance,\n UploaderResultType,\n UploaderFileListItem,\n} from 'vant';\n
\nUploaderInstance
\u662F\u7EC4\u4EF6\u5B9E\u4F8B\u7684\u7C7B\u578B\uFF0C\u7528\u6CD5\u5982\u4E0B\uFF1A
import { ref } from 'vue';\nimport type { UploaderInstance } from 'vant';\n\nconst uploaderRef = ref<UploaderInstance>();\n\nuploaderRef.value?.chooseFile();\n
\n\u7EC4\u4EF6\u63D0\u4F9B\u4E86\u4E0B\u5217 CSS \u53D8\u91CF\uFF0C\u53EF\u7528\u4E8E\u81EA\u5B9A\u4E49\u6837\u5F0F\uFF0C\u4F7F\u7528\u65B9\u6CD5\u8BF7\u53C2\u8003 ConfigProvider \u7EC4\u4EF6\u3002
\n\u540D\u79F0 | \n\u9ED8\u8BA4\u503C | \n\u63CF\u8FF0 | \n
---|---|---|
--van-uploader-size | \n80px | \n- | \n
--van-uploader-icon-size | \n24px | \n- | \n
--van-uploader-icon-color | \nvar(--van-gray-4) | \n- | \n
--van-uploader-text-color | \nvar(--van-text-color-2) | \n- | \n
--van-uploader-text-font-size | \nvar(--van-font-size-sm) | \n- | \n
--van-uploader-upload-background | \nvar(--van-gray-1) | \n- | \n
--van-uploader-upload-active-color | \nvar(--van-active-color) | \n- | \n
--van-uploader-delete-color | \nvar(--van-white) | \n- | \n
--van-uploader-delete-icon-size | \n14px | \n- | \n
--van-uploader-delete-background | \nrgba(0, 0, 0, 0.7) | \n- | \n
--van-uploader-file-background | \nvar(--van-background) | \n- | \n
--van-uploader-file-icon-size | \n20px | \n- | \n
--van-uploader-file-icon-color | \nvar(--van-gray-7) | \n- | \n
--van-uploader-file-name-padding | \n0 var(--van-padding-base) | \n- | \n
--van-uploader-file-name-margin-top | \nvar(--van-padding-xs) | \n- | \n
--van-uploader-file-name-font-size | \nvar(--van-font-size-sm) | \n- | \n
--van-uploader-file-name-text-color | \nvar(--van-gray-7) | \n- | \n
--van-uploader-mask-text-color | \nvar(--van-white) | \n- | \n
--van-uploader-mask-background | \nfade(var(--van-gray-8), 88%) | \n- | \n
--van-uploader-mask-icon-size | \n22px | \n- | \n
--van-uploader-mask-message-font-size | \nvar(--van-font-size-sm) | \n- | \n
--van-uploader-mask-message-line-height | \nvar(--van-line-height-xs) | \n- | \n
--van-uploader-loading-icon-size | \n22px | \n- | \n
--van-uploader-loading-icon-color | \nvar(--van-white) | \n- | \n
--van-uploader-disabled-opacity | \nvar(--van-disabled-opacity) | \n- | \n
--van-uploader-border-radius | \n0px | \n- | \n
Uploader \u91C7\u7528\u4E86 HTML \u539F\u751F\u7684 <input type="file" />
\u6807\u7B7E\u8FDB\u884C\u4E0A\u4F20\uFF0C\u80FD\u5426\u4E0A\u4F20\u53D6\u51B3\u4E8E\u5F53\u524D\u7CFB\u7EDF\u548C\u6D4F\u89C8\u5668\u7684\u517C\u5BB9\u6027\u3002\u5F53\u9047\u5230\u65E0\u6CD5\u4E0A\u4F20\u7684\u95EE\u9898\u65F6\uFF0C\u4E00\u822C\u6709\u4EE5\u4E0B\u51E0\u79CD\u60C5\u51B5\uFF1A
webp
\u6216 heic
\u683C\u5F0F\u3002\u90E8\u5206\u624B\u673A\u5728\u62CD\u7167\u4E0A\u4F20\u65F6\u4F1A\u51FA\u73B0\u56FE\u7247\u88AB\u65CB\u8F6C 90 \u5EA6\u7684\u95EE\u9898\uFF0C\u8FD9\u4E2A\u95EE\u9898\u53EF\u4EE5\u901A\u8FC7 compressorjs \u6216\u5176\u4ED6\u5F00\u6E90\u5E93\u8FDB\u884C\u5904\u7406\u3002
\ncompressorjs \u662F\u4E00\u4E2A\u5F00\u6E90\u7684\u56FE\u7247\u5904\u7406\u5E93\uFF0C\u63D0\u4F9B\u4E86\u56FE\u7247\u538B\u7F29\u3001\u56FE\u7247\u65CB\u8F6C\u7B49\u80FD\u529B\u3002
\n\u4F7F\u7528 compressorjs \u8FDB\u884C\u5904\u7406\u7684\u793A\u4F8B\u4EE3\u7801\u5982\u4E0B:
\n<van-uploader :before-read="beforeRead" />\n
\nimport Compressor from 'compressorjs';\n\nexport default {\n setup() {\n const beforeRead = (file) =>\n new Promise((resolve) => {\n // compressorjs \u9ED8\u8BA4\u5F00\u542F checkOrientation \u9009\u9879\n // \u4F1A\u5C06\u56FE\u7247\u4FEE\u6B63\u4E3A\u6B63\u786E\u65B9\u5411\n new Compressor(file, {\n success: resolve,\n error(err) {\n console.log(err.message);\n },\n });\n });\n\n return {\n beforeRead,\n };\n },\n};\n
\n\u8FD9\u79CD\u73B0\u8C61\u4E00\u822C\u662F\u5185\u5B58\u4E0D\u8DB3\u5BFC\u81F4\u7684\uFF0C\u901A\u5E38\u53D1\u751F\u5728\u65E7\u673A\u578B\u4E0A\uFF1B\u4E0A\u4F20\u4E00\u5F20\u8F83\u5927\u7684\u56FE\u7247\u5F15\u8D77\u4E5F\u5F15\u8D77\u6B64\u73B0\u8C61\u3002
\n\u4E3A\u4E86\u51CF\u5C11\u8FD9\u79CD\u60C5\u51B5\u7684\u51FA\u73B0\uFF0C\u53EF\u4EE5\u5728\u4E0A\u4F20\u56FE\u7247\u524D\u5BF9\u56FE\u7247\u8FDB\u884C\u538B\u7F29\uFF0C\u538B\u7F29\u65B9\u6CD5\u8BF7\u53C2\u8003\u4E0A\u6587\u4E2D\u63D0\u5230\u7684 compressorjs
\u5E93\u3002
\u76EE\u524D Chrome\u3001Safari \u7B49\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u5C55\u793A HEIC/HEIF \u683C\u5F0F\u7684\u56FE\u7247\uFF0C\u56E0\u6B64\u4E0A\u4F20\u540E\u65E0\u6CD5\u5728 Uploader \u7EC4\u4EF6\u4E2D\u8FDB\u884C\u9884\u89C8\u3002
\n[HEIF] \u683C\u5F0F\u7684\u517C\u5BB9\u6027\u8BF7\u53C2\u8003 caniuse\u3002
\n\u5728\u4E0A\u4F20\u56FE\u7247\u65F6\uFF0C\u5982\u679C\u7528\u6237\u6CA1\u6709\u6388\u4E88\u5F53\u524D App \u6444\u50CF\u5934\u6743\u9650\uFF0C\u4F1A\u5BFC\u81F4 Uploader \u7EC4\u4EF6\u65E0\u6CD5\u4F7F\u7528\u3002
\n\u4F60\u53EF\u4EE5\u901A\u8FC7\u6D4F\u89C8\u5668\u63D0\u4F9B\u7684 getUserMedia \u65B9\u6CD5\u6765\u5224\u65AD\u662F\u5426\u88AB\u6388\u4E88\u4E86\u6444\u50CF\u5934\u6743\u9650\uFF08\u8BF7\u7559\u610F getUserMedia
\u65B9\u6CD5\u65E0\u6CD5\u5728 iOS 10 \u4E2D\u4F7F\u7528\uFF09\u3002
\u4EE5\u4E0B\u662F\u4E00\u4E2A\u7B80\u5316\u7684\u793A\u4F8B\uFF1A
\nnavigator.mediaDevices\n .getUserMedia({ video: true })\n .then((stream) => {\n console.log(stream);\n })\n .catch((err) => {\n console.log(err);\n });\n
\n