基于Umi 上传文件和下载文件

2,492 阅读1分钟

对于封装的request请求,已经封装好的工具,下载时会将后端返回的二进制流自动通过返回拦截,转换为下载的文件

1-在服务请求的文件内,创建请求数据的函数

`
//某个请求下载
export async function download(options) {
  try {
    let response = await request.get('/noapproval/downLoadFile', {
      params: options,
      download: true, //添加下载标识
    });
    return response;
  } catch (err) {
    return err;
  }
}

`

2-当需要使用时,需要引入函数

` 
import * as pendingApprovalServe from '@/services/supplyDemandApproval/pendingApproval'; 


     <a onClick={() => openDown(recordId) }>
        点击即可下载  
     </a>                           
                                  
                                    
     const openDown = (recordId) => {
        pendingApprovalServe.download({ recordId });
     };                          

`

对于上传文件,是通过对antdesign组件的upLoad组件

1-对组件进行使用

    `
       <Upload {...props}>
          <Button>
             <Icon type="upload" /> 上传
          </Button>
        </Upload>                         

    `
    

2-对props进行规范

`
    const props = {
       action: '/api/noapproval/uploadFile',  //请求的地址

        onChange(info) {
          if (info.file.status !== 'uploading') {
            console.log(info.file, info.fileList);
          }
          if (info.file.status === 'done') {  //这里是文件上传完毕
            setPathData(info.file.response.data.path);
            setReNameData(info.file.response.data.realName);
            console.log(info.file, 'ssssssssssssssssssssssssssssss');
            message.success(`${info.file.name} file uploaded successfully`);
          } else if (info.file.status === 'error') {
            message.error(`${info.file.name} file upload failed.`);
          }
          },
     };
`

这里踩的坑,首先是请求的地址,这个地址需要在后端提供的接口上加上api,因为使用了proxy代理,如果没有加上api虽然在netWork上能看的见请求的地址,返回状态也是200ok,但后端根本就没有收到请求,点击也不会下载
服务器代理的api是识别标识,是先找到api这个标识然后再让api为空,如果请求的时候不加api,游览器根本找不到这个标识,所以需要加上api。
然后是在上传文件后,后端会返回我们文件名,和文件路径,我们需要拿到这些数据,再当做参数发送给后端,在onChange函数中有文件上传完毕的调用,里面有response,在这里面可以拿到返回的数据

3-服务器代理

    `
      proxy: {
        '/api': {
          target: 'http://10.160.1.149:8090/gsgx/',  //在这里可以切换环境
          changeOrigin: true,
          pathRewrite: { '^/api': '' },  //取消api
        },
      },
    `