vue使用axios上传文件展示进度

前端vue

 <div style="display: flex;justify-content: flex-start;align-items: center">
          <n-input readonly v-model:value="optionData.dataset" size="small"></n-input>
          <n-button  size="small">
            <n-icon size="25" class="go-cursor-pointer" style="z-index: 9999;" @click="uploadFile">
              <Upload style="color: white"></Upload>
            </n-icon>
          </n-button>
</div>

js代码

const uploadFile = ()=>{
  const input = document.createElement('input')
  input.type = 'file'
  input.accept = '.png,.jpg,.jpeg,.gif' // 这里只允许部分图片类型

  //绑定onchange方法
  input.onchange = async () => {
    if (!input.files || !input.files.length) return
    const file = input.files[0]
    const { name, size, type } = file
    if (size > 1024 * 1024 * backgroundImageSize) {
    	window['$message'].warning(`图片超出 ${backgroundImageSize}M 限制,请重新上传!`)
        return false
     }
     if (type !== FileTypeEnum.PNG && type !== FileTypeEnum.JPEG && type !== FileTypeEnum.GIF) {
       window['$message'].warning('文件格式不符合,请重新上传!')
       return false
     }
    let formData = new FormData();
    formData.append('object', file);
    // 发送上传请求
    const config = {
      headers:{
        'Content-Type': 'multipart/form-data;charset=UTF-8'
      },
      onUploadProgress: (progressEvent:any) => {
        const uploadPercentage = Math.round((progressEvent.loaded / progressEvent.total) * 100); // 更新上传进度百分比
        console.log("进度",uploadPercentage)
      },
    }
    axiosInstance.post('/file/upload', formData,config).then(res=>{
        props.optionData.dataset=res.data.fileurl
    })
  }
  //执行点击触发onchange绑定的方法
  input.click()
}

java代码

	@PostMapping("/upload")
	public AjaxResult upload(@RequestBody MultipartFile object) throws IOException{
		String fileName = object.getOriginalFilename();
		//默认文件格式
		String suffixName=v2Config.getDefaultFormat();
		String mediaKey="";
		Long filesize= object.getSize();
		//文件名字
		String fileSuffixName="";
		if(fileName.lastIndexOf(".")!=-1) {//有后缀
			 suffixName = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
			 //mediaKey=MD5.create().digestHex(fileName);
			 mediaKey=SnowflakeIdWorker.getUUID();
			 fileSuffixName=mediaKey+suffixName;
		}else {//无后缀
			//取得唯一id
			 //mediaKey = MD5.create().digestHex(fileName+suffixName);
			mediaKey=SnowflakeIdWorker.getUUID();
			//fileSuffixName=mediaKey+suffixName;
		}
		String virtualKey=getFirstNotNull(v2Config.getXnljmap());
		String absolutePath=v2Config.getXnljmap().get(getFirstNotNull(v2Config.getXnljmap()));
		SysFile sysFile=new SysFile();
		sysFile.setId(SnowflakeIdWorker.getUUID());
		sysFile.setFileName(fileSuffixName);
		sysFile.setFileSize(Integer.parseInt(filesize+""));
		sysFile.setFileSuffix(suffixName);
		sysFile.setCreateTime(DateUtil.formatLocalDateTime(LocalDateTime.now()));
		String filepath=DateUtil.formatDate(new Date());
		sysFile.setRelativePath(filepath);
		sysFile.setVirtualKey(virtualKey);
		sysFile.setAbsolutePath(absolutePath.replace("file:",""));
		iSysFileService.saveOrUpdate(sysFile);
		File desc = getAbsoluteFile(v2Config.getFileurl()+File.separator+filepath,fileSuffixName);
		object.transferTo(desc);
		SysFileVo sysFileVo=BeanUtil.copyProperties(sysFile, SysFileVo.class);
		sysFileVo.setFileurl(v2Config.getHttpurl()+sysFile.getVirtualKey()+"/"+sysFile.getRelativePath()+"/"+sysFile.getFileName());
		return AjaxResult.successData(200, sysFileVo);
	}

如果前端使用的时ajax:

    function uploadFile() {  
      var formData = new FormData();  
      var fileInput = document.getElementById('fileInput');  
      var file = fileInput.files[0];  
      formData.append('object', file);  
  
      var xhr = new XMLHttpRequest();  
      xhr.open('POST', '/upload', true);  
      xhr.upload.onprogress = function(event) {  
        if (event.lengthComputable) {  
          var percentComplete = (event.loaded / event.total) * 100;  
          console.log(percentComplete + '% uploaded');  
          // 在这里更新进度条或进度显示  
        }  
      };  
      xhr.onload = function() {  
        if (this.status === 200) {  
          console.log('File uploaded successfully');  
          // 在这里处理上传成功后的操作  
        } else {  
          console.log('File upload failed');  
        }  
      };  
      xhr.send(formData);  
    } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值