当前位置:   article > 正文

React antd upload组件上传视频并实现视频预览_antd文件上传怎么预览mp4文件

antd文件上传怎么预览mp4文件

记录问题:antd的upload组件文档中对于视频的上传预览没有明确的文档demo,在这里记录一下

项目需求:支持图片及视频的上传并实现预览,点击上传后不会立即请求接口上传资源,后续点击确定再上传

上代码

  1. <ProFormUploadButton
  2. name="upload"
  3. label="广告"
  4. max={1}
  5. fieldProps={{
  6. accept: 'image/png,video/mp4',
  7. name: 'file',
  8. listType: 'picture-card',
  9. maxCount: 1,
  10. withCredentials: false,
  11. onPreview: handlePreview,
  12. previewFile: (file) => {
  13. if (file.type === 'video/mp4') {
  14. return new Promise((resolve, reject) => {
  15. const reader = new FileReader();
  16. reader.readAsDataURL(file);
  17. reader.onload = () => resolve(reader.result as string);
  18. reader.onerror = (error) => reject(error);
  19. });
  20. } else {
  21. return new Promise(async (resolve) => {
  22. const img = await getBase64(file as RcFile);
  23. resolve(img);
  24. });
  25. }
  26. },
  27. fileList: fileList,
  28. // eslint-disable-next-line @typescript-eslint/no-shadow
  29. onChange: ({ fileList }) => {
  30. setFileList(fileList);
  31. },
  32. beforeUpload: () => {
  33. return false;
  34. },
  35. }}
  36. icon={<ToTopOutlined style={{ color: '#745CC3', fontSize: 24 }} />}
  37. title=""
  38. rules={[{ required: true, message: '请上传图片/视频' }]}
  39. />
  1. const handleCancel = () => {
  2. setPreviewOpen(false);
  3. setPreviewVideoOpen(false);
  4. videoRef.current.pause();
  5. };
  6. const handlePreview = async (file: any) => {
  7. if (file.type === 'video/mp4') {
  8. const current = file.originFileObj;
  9. const fileReader = new FileReader();
  10. fileReader.readAsDataURL(current);
  11. fileReader.onload = function (e) {
  12. setPreviewVideo(e.target?.result);
  13. setPreviewVideoOpen(true);
  14. setPreviewVideoTitle(file.name || file.url!.substring(file.url!.lastIndexOf('/') + 1));
  15. };
  16. } else {
  17. if (!file.url && !file.preview) {
  18. file.preview = await getBase64(file.originFileObj as RcFile);
  19. }
  20. setPreviewImage(file.url || (file.preview as string));
  21. setPreviewOpen(true);
  22. setPreviewTitle(file.name || file.url!.substring(file.url!.lastIndexOf('/') + 1));
  23. }
  24. };
  1. <Modal
  2. open={previewOpen}
  3. zIndex={9999}
  4. title={previewTitle}
  5. footer={null}
  6. centered={true}
  7. onCancel={handleCancel}
  8. >
  9. <img alt="example" style={{ width: '100%' }} src={previewImage} />
  10. </Modal>
  11. <Modal
  12. open={previewVideoOpen}
  13. zIndex={9999}
  14. title={previewVideoTitle}
  15. footer={null}
  16. centered={true}
  17. width={540}
  18. onCancel={handleCancel}
  19. >
  20. <video src={previewVideo} controls width={500} height={500} ref={videoRef}>
  21. 您的浏览器不支持 video 标签。
  22. </video>
  23. </Modal>

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号