赞
踩
记录问题:antd的upload组件文档中对于视频的上传预览没有明确的文档demo,在这里记录一下
项目需求:支持图片及视频的上传并实现预览,点击上传后不会立即请求接口上传资源,后续点击确定再上传
上代码
- <ProFormUploadButton
- name="upload"
- label="广告"
- max={1}
- fieldProps={{
- accept: 'image/png,video/mp4',
- name: 'file',
- listType: 'picture-card',
- maxCount: 1,
- withCredentials: false,
- onPreview: handlePreview,
- previewFile: (file) => {
- if (file.type === 'video/mp4') {
- return new Promise((resolve, reject) => {
- const reader = new FileReader();
- reader.readAsDataURL(file);
- reader.onload = () => resolve(reader.result as string);
- reader.onerror = (error) => reject(error);
- });
- } else {
- return new Promise(async (resolve) => {
- const img = await getBase64(file as RcFile);
- resolve(img);
- });
- }
- },
- fileList: fileList,
- // eslint-disable-next-line @typescript-eslint/no-shadow
- onChange: ({ fileList }) => {
- setFileList(fileList);
- },
- beforeUpload: () => {
- return false;
- },
- }}
- icon={<ToTopOutlined style={{ color: '#745CC3', fontSize: 24 }} />}
- title=""
- rules={[{ required: true, message: '请上传图片/视频' }]}
- />

- const handleCancel = () => {
- setPreviewOpen(false);
- setPreviewVideoOpen(false);
- videoRef.current.pause();
- };
-
- const handlePreview = async (file: any) => {
- if (file.type === 'video/mp4') {
- const current = file.originFileObj;
- const fileReader = new FileReader();
- fileReader.readAsDataURL(current);
- fileReader.onload = function (e) {
- setPreviewVideo(e.target?.result);
- setPreviewVideoOpen(true);
- setPreviewVideoTitle(file.name || file.url!.substring(file.url!.lastIndexOf('/') + 1));
- };
- } else {
- if (!file.url && !file.preview) {
- file.preview = await getBase64(file.originFileObj as RcFile);
- }
- setPreviewImage(file.url || (file.preview as string));
- setPreviewOpen(true);
- setPreviewTitle(file.name || file.url!.substring(file.url!.lastIndexOf('/') + 1));
- }
- };

- <Modal
- open={previewOpen}
- zIndex={9999}
- title={previewTitle}
- footer={null}
- centered={true}
- onCancel={handleCancel}
- >
- <img alt="example" style={{ width: '100%' }} src={previewImage} />
- </Modal>
- <Modal
- open={previewVideoOpen}
- zIndex={9999}
- title={previewVideoTitle}
- footer={null}
- centered={true}
- width={540}
- onCancel={handleCancel}
- >
- <video src={previewVideo} controls width={500} height={500} ref={videoRef}>
- 您的浏览器不支持 video 标签。
- </video>
- </Modal>

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。