antdv upload+image 实现上传组件中预览为多文件预览功能

antdv的原生upload 显示为单文件预览,如果上传了多个图片的情况下,想要实现图片左右切换跟缩放功能.在此背景下,做了代码实现.

实现思路:
  1. 原有的upload 存在 预览功能重写功能
  2. image 组件有 标签,可以进行多图片上传,其中的preview属性可以设置一些预览参数,设置是否显示,从第几张开始显示
  3. 将其组合实现多图片预览功能
  4. 预览:
  5. 上传组件样式
  6. 点击第一张图片后显示如下:
  7. 显示样式

代码如下
html

<a-upload
        action="fileUrl"
        :limit="80"
        list-type="picture-card"
        :onSuccess="(res, file) => {
          file[file.length - 1].url = res.response.data
          }"
        v-model:fileList="fileUrlComputed"
        @preview="setVisible"
    >
      <div v-if="form.file.attachment.length < 6">
        <a-icon type="plus"/>
        <div class="ant-upload-text">
          上传
        </div>
      </div>
    </a-upload>
    <div style="display: none">
      <a-image-preview-group :preview="{
        'visible' :openImage,
        'minScale' : 0.1,
        'current' : openIndex,
        onVisibleChange: vis => (openImage = vis)
      }">
        <a-image :width="200" v-for="(item,index) in form.file.attachment" :src="item"/>
      </a-image-preview-group>
    </div>




ts


const openImage = ref<boolean>(false);
const openIndex = ref<number>(0);

const setVisible = (file): void => {
  openImage.value = true;
  openIndex.value = file.index;
};
// 计算属性 封装url
const fileUrlComputed = computed(() => {
  // 本来是计算属性 因为是例子 把原来的删掉 改成如下
  var temp = [
    {
      uid: '-1',
      name: 'image.png',
      status: 'done',
      url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',
      index:0,
    },
    {
      uid: '-2',
      name: 'image.png',
      status: 'done',
      url: 'https://aliyuncdn.antdv.com/vue.png',
      index:1,

    },
  ];
  return temp;
});
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要在前端使用 antdv 组件实现图片上传。可以使用 Upload 组件实现。具体代码如下: ``` <template> <div> <a-upload :action="'http://localhost:8080/api/upload'" :headers="{Authorization: 'Bearer ' + token}" :before-upload="beforeUpload" :on-success="onUploadSuccess" :show-upload-list="false" > <a-button icon="upload">Click to Upload</a-button> </a-upload> </div> </template> <script> export default { data() { return { token: 'your_token_here' } }, methods: { beforeUpload(file) { const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'; if (!isJpgOrPng) { this.$message.error('You can only upload JPG/PNG file!'); return false; } const isLt2M = file.size / 1024 / 1024 < 2; if (!isLt2M) { this.$message.error('Image must smaller than 2MB!'); return false; } return true; }, onUploadSuccess(response) { this.$message.success('Upload successfully!'); } } } </script> ``` 在这个代码,我们通过设置 Upload 组件的属性实现了以下功能: - 设置上传的地址为 `http://localhost:8080/api/upload`,这是后端提供的图片上传接口; - 设置请求头的 `Authorization` 属性为我们的 token,这是为了验证用户的身份; - 设置上传前的验证函数 `beforeUpload`,用于检查上传文件类型和大小是否符合要求; - 设置上传成功后的回调函数 `onUploadSuccess`,用于在页面上提示用户上传成功。 接下来,我们需要在后端使用 SpringBoot 来接收前端上传的图片。具体代码如下: ```java @RestController @RequestMapping("/api") public class UploadController { @PostMapping("/upload") public ResponseEntity<?> uploadFile(@RequestParam("file") MultipartFile file) { try { // 保存上传文件到本地磁盘或云存储 // ... return ResponseEntity.ok().body("Upload successfully!"); } catch (Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to upload file."); } } } ``` 在这个代码,我们通过 `@PostMapping("/upload")` 注解来指定接收前端上传的图片请求。`@RequestParam("file") MultipartFile file` 表示接收一个名为 `file` 的文件参数。在接收到图片后,我们可以将其保存到本地磁盘或云存储,并返回一个上传成功的信息给前端。如果上传过程出现了异常,我们会返回一个 500 错误给前端。 以上就是使用 antdv 组件和 SpringBoot 来实现图片上传的基本流程。当然,具体的实现方式还会因为不同的业务需求而有所差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值