ant design Upload 阿里控件 前端实现上传下载 json

 

1:导出/下载

点击按钮要导出成json文件

<i className="export" onClick={this.showExport} role="presentation" onKeyPress={() => { }} />

点击时候调用确认要导出数据方法 ,方法内容

 showExport(product) {
    const that = this;
    confirm({
      title: '确定要导出?',
      content: `您确定要导出${product.productName}数据`,
      okText: '确定',
      cancelText: '取消',
      onOk() {
        api({
          method: 'POST',
          url: `/product/exportProduct`,
          data: {
            productId : product.id,
            tenantId: product.tenantId,
          },
        }).then((res) => {
          if(res){
            console.log('===导出成功 res :', res);  
            //将JSON 对象转换为字符串
            let dataObj = res;
            let dataJson = JSON.stringify(dataObj);
            let num = parseInt((Math.random() + 1) * Math.pow(10,10-1));
            console.log('===导出成功 num :', num);  
            that.downJson(dataJson,num);
            Toast('导出成功');
          }
        }).catch((err) => {
          // Toast(err.response.data.desc || '删除失败');
        });
      },
      onCancel() { 
      },
    });
  }

其中api是封装好的路径,再拼上对应的url接口,data是接口需要的参数,因为后端返回res是个对象,如图

所以我还得把json对象转成字符串

 //将JSON 对象转换为字符串
let dataObj = res;
let dataJson = JSON.stringify(dataObj);

//JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串

然后传入转换后的字符串和文件名,调用我封装好的下载方法

  downJson(content, filename){
    // 下载文件方法
    let eleLink = document.createElement('a');
    eleLink.download = filename + ".json";
    eleLink.style.display = 'none';
    // 字符内容转变成blob地址
    let blob = new Blob([content]);
    eleLink.href = URL.createObjectURL(blob);
    // 触发点击
    document.body.appendChild(eleLink);
    eleLink.click();
    // 然后移除
    document.body.removeChild(eleLink);
  }

名字是用了10位数的随机数拼上.json后缀

2:上传

上传是用了阿里的控件 请点 控件链接 

import { Upload } from 'antd';

首先是导包

<Upload {...uploadIncrProps}>
              <Button type="primary" style={{ height: '32px', float: 'right', marginRight: '5%' }} >
                <span>导入新产品</span>
                <i className="icon-add" />
              </Button>
            </Upload>

然后是样式

const uploadIncrProps = {
      showUploadList: false,
      onChange: this.uploadIncrChange,
      accept: 'json/*',
      action: '/api/product/import',
      headers: {
        token: storage.get('token'),
        terminal: 'WEB',
      },
    };

还有就是控件的配置,api看上面阿里的链接,这边我写了个刷新方法,当状态改变时候会有提示

uploadIncrChange(info) {
    console.log('weichongbin1 info = ', info);
    if (info.file.status === 'uploading') {
      Loading.open();
    }
    if (info.file.status === 'done') {
      Loading.close();
      const { response } = info.file;
      console.log('weichongbin1 response = ', response);
      Toast('导入成功');
    } else if (info.file.status === 'error') {
      Loading.close();
      Toast('导入失败 请确认服务器正常 文件格式为.json');
    }
  }

结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值