diff --git a/components/upload/Upload.tsx b/components/upload/Upload.tsx
index aff037846..290afb9b8 100644
--- a/components/upload/Upload.tsx
+++ b/components/upload/Upload.tsx
@@ -315,6 +315,7 @@ export default defineComponent({
typeof showUploadList === 'boolean' ? ({} as ShowUploadListInterface) : showUploadList;
return showUploadList ? (
) : (
iconNode
diff --git a/components/upload/index.en-US.md b/components/upload/index.en-US.md
index 760340835..e1e868dbd 100644
--- a/components/upload/index.en-US.md
+++ b/components/upload/index.en-US.md
@@ -44,7 +44,7 @@ Uploading is the process of publishing information (web pages, text, pictures, v
| previewIcon | custom preview icon | v-slot:iconRender="{file: UploadFile}" | - | 3.0 | |
| progress | Custom progress bar | [ProgressProps](/components/progress/#API) (support `type="line"` only) | { strokeWidth: 2, showInfo: false } | 3.0 | |
| removeIcon | custom remove icon | v-slot:iconRender="{file: UploadFile}" | - | 3.0 | |
-| showUploadList | Whether to show default upload list, could be an object to specify `showPreviewIcon`, `showRemoveIcon` and `showDownloadIcon` individually | Boolean or { showPreviewIcon?: boolean, showRemoveIcon?: boolean, showDownloadIcon?: boolean } | true | showDownloadIcon(3.0) | |
+| showUploadList | Whether to show default upload list, could be an object to specify `showPreviewIcon`, `showRemoveIcon` and `showDownloadIcon` individually | Boolean or { showPreviewIcon?: boolean, showRemoveIcon?: boolean, showDownloadIcon?: boolean } | true | showDownloadIcon(3.0) | |
| supportServerRender | Need to be turned on while the server side is rendering. | boolean | false | | |
| withCredentials | ajax upload with cookie sent | boolean | false | | |
@@ -63,14 +63,15 @@ Uploading is the process of publishing information (web pages, text, pictures, v
Extends File with additional props.
-| Property | Description | Type | Default |
-| --- | --- | --- | --- |
-| name | File name | string | - |
-| percent | Upload progress percent | number | - |
-| status | Upload status. Show different style when configured | `error` \| `success` \| `done` \| `uploading` \| `removed` | - |
-| thumbUrl | Thumb image url | string | - |
-| uid | unique id. Will auto generate when not provided | string | - |
-| url | Download url | string | - |
+| Property | Description | Type | Default | Version |
+| --- | --- | --- | --- | --- |
+| crossOrigin | CORS settings attributes | `'anonymous'` \| `'use-credentials'` \| `''` | - | 3.3.0 |
+| name | File name | string | - | |
+| percent | Upload progress percent | number | - | |
+| status | Upload status. Show different style when configured | `error` \| `success` \| `done` \| `uploading` \| `removed` | - | |
+| thumbUrl | Thumb image url | string | - | |
+| uid | unique id. Will auto generate when not provided | string | - | |
+| url | Download url | string | - | |
### change
@@ -125,3 +126,11 @@ See .
### Why does `change` sometimes return File object and other times return { originFileObj: File }?
For compatible case, we return File object when `beforeUpload` return `false`. It will merge to `{ originFileObj: File }` in next major version. Current version is compatible to get origin file by `info.file.originFileObj`. You can change this before major release.
+
+### Why sometime Chrome can not upload?
+
+Chrome update will also break native upload. Please restart chrome to finish the upload work. Ref:
+
+- [#32672](https://github.com/ant-design/ant-design/issues/32672)
+- [#32913](https://github.com/ant-design/ant-design/issues/32913)
+- [#33988](https://github.com/ant-design/ant-design/issues/33988)
diff --git a/components/upload/index.zh-CN.md b/components/upload/index.zh-CN.md
index 73c2e47f0..fb206770f 100644
--- a/components/upload/index.zh-CN.md
+++ b/components/upload/index.zh-CN.md
@@ -64,14 +64,15 @@ cover: https://gw.alipayobjects.com/zos/alicdn/QaeBt_ZMg/Upload.svg
继承自 File,附带额外属性用于渲染。
-| 参数 | 说明 | 类型 | 默认值 |
-| --- | --- | --- | --- |
-| name | 文件名 | string | - |
-| percent | 上传进度 | number | - |
-| status | 上传状态,不同状态展示颜色也会有所不同 | `error` \| `success` \| `done` \| `uploading` \| `removed` | - |
-| thumbUrl | 缩略图地址 | string | - |
-| uid | 唯一标识符,不设置时会自动生成 | string | - |
-| url | 下载地址 | string | - |
+| 参数 | 说明 | 类型 | 默认值 | 版本 |
+| --- | --- | --- | --- | --- |
+| crossOrigin | CORS 属性设置 | `'anonymous'` \| `'use-credentials'` \| `''` | - | 3.3.0 |
+| name | 文件名 | string | - | - |
+| percent | 上传进度 | number | - | - |
+| status | 上传状态,不同状态展示颜色也会有所不同 | `error` \| `success` \| `done` \| `uploading` \| `removed` | - | - |
+| thumbUrl | 缩略图地址 | string | - | - |
+| uid | 唯一标识符,不设置时会自动生成 | string | - | - |
+| url | 下载地址 | string | - | - |
### change
@@ -126,3 +127,11 @@ cover: https://gw.alipayobjects.com/zos/alicdn/QaeBt_ZMg/Upload.svg
### `onChange` 为什么有时候返回 File 有时候返回 { originFileObj: File }?
历史原因,在 `beforeUpload` 返回 `false` 时,会返回 File 对象。在下个大版本我们会统一返回 `{ originFileObj: File }` 对象。当前版本已经兼容所有场景下 `info.file.originFileObj` 获取原 File 写法。你可以提前切换。
+
+### 为何有时 Chrome 点击 Upload 无法弹出文件选择框?
+
+与 antd 无关,原生上传也会失败。请重启 Chrome 浏览器,让其完成升级工作。相关 issue:
+
+- [#32672](https://github.com/ant-design/ant-design/issues/32672)
+- [#32913](https://github.com/ant-design/ant-design/issues/32913)
+- [#33988](https://github.com/ant-design/ant-design/issues/33988)
diff --git a/components/upload/interface.tsx b/components/upload/interface.tsx
index 8e5d56322..cabe9fbec 100755
--- a/components/upload/interface.tsx
+++ b/components/upload/interface.tsx
@@ -27,6 +27,7 @@ export interface UploadFile {
status?: UploadFileStatus;
percent?: number;
thumbUrl?: string;
+ crossOrigin?: HTMLImageElement['crossOrigin'];
originFileObj?: FileType;
response?: T;
error?: any;
@@ -49,7 +50,7 @@ export interface ShowUploadListInterface {
export interface UploadChangeParam {
// https://github.com/ant-design/ant-design/issues/14420
file: T;
- fileList: UploadFile[];
+ fileList: T[];
event?: { percent: number };
}
diff --git a/components/upload/style/index.less b/components/upload/style/index.less
index 49ba7f211..80c067220 100644
--- a/components/upload/style/index.less
+++ b/components/upload/style/index.less
@@ -168,9 +168,11 @@
&-btn {
opacity: 0;
}
+
&-btn.@{ant-prefix}-btn-sm {
- height: 20px;
+ height: @line-height-base * @font-size-base;
line-height: 1;
+ vertical-align: top;
}
&.picture {
@@ -185,12 +187,16 @@
.@{iconfont-css-prefix} {
color: @upload-actions-color;
+ transition: all 0.3s;
+ }
+
+ &:hover .@{iconfont-css-prefix} {
+ color: @text-color;
}
}
&-info {
height: 100%;
- padding: 0 4px;
transition: background-color 0.3s;
> span {
@@ -210,30 +216,10 @@
}
}
- .@{iconfont-css-prefix}-close {
- position: absolute;
- top: 6px;
- right: 4px;
- color: @text-color-secondary;
- font-size: 10px;
- line-height: 0;
- cursor: pointer;
- opacity: 0;
- transition: all 0.3s;
-
- &:hover {
- color: @text-color;
- }
- }
-
&:hover &-info {
background-color: @item-hover-bg;
}
- &:hover .@{iconfont-css-prefix}-close {
- opacity: 1;
- }
-
&:hover &-card-actions-btn {
opacity: 1;
}
@@ -369,14 +355,6 @@
margin-top: 0;
padding-left: 56px;
}
-
- .@{iconfont-css-prefix}-close {
- position: absolute;
- top: 8px;
- right: 8px;
- line-height: 1;
- opacity: 1;
- }
}
// ======================== Picture Card ========================
@@ -389,10 +367,6 @@
vertical-align: top;
}
- &.@{upload-prefix-cls}-list::after {
- display: none;
- }
-
.@{upload-item} {
height: 100%;
margin: 0;
diff --git a/components/upload/style/index.tsx b/components/upload/style/index.tsx
index 582def0cc..591032d5d 100644
--- a/components/upload/style/index.tsx
+++ b/components/upload/style/index.tsx
@@ -2,6 +2,7 @@ import '../../style/index.less';
import './index.less';
// style dependencies
+// deps-lint-skip: form
import '../../button/style';
import '../../progress/style';
import '../../tooltip/style';
diff --git a/components/upload/style/rtl.less b/components/upload/style/rtl.less
index 0dd9836ef..a7054731f 100644
--- a/components/upload/style/rtl.less
+++ b/components/upload/style/rtl.less
@@ -72,13 +72,6 @@
}
}
- .@{iconfont-css-prefix}-close {
- .@{upload-prefix-cls}-list-rtl & {
- right: auto;
- left: 4px;
- }
- }
-
&-error &-card-actions {
.@{iconfont-css-prefix} {
.@{upload-prefix-cls}-list-rtl & {
@@ -145,13 +138,6 @@
padding-left: 0;
}
}
-
- .@{iconfont-css-prefix}-close {
- .@{upload-prefix-cls}-list-rtl& {
- right: auto;
- left: 8px;
- }
- }
}
&-picture-card {