如何通过luch-request 3.x通过request api上传二进制文件?

luch-request 3.0

通过组件 uni-file-picker@select 事件获取到二进制文件后,希望通过 luch-requestrequest api 来上传,写来写去,感觉怎么都不对,代码如下:

封装的请求插件:

import Request from "@/js_sdk/luch-request/luch-request/index.js";
import config from "@/api/common/config.js";


const http = new Request({
    baseURL: config.baseUrl + `/api/`, // 
    custom: { auth: true }, //
    timeout: 10000,
});



http.interceptors.request.use(
    (config) => {
        
        if (config.custom && config.custom.timeout) {
            config.timeout = config.custom.timeout
        }
        
        const token = getToken();
        config.header = {
            ...config.header,
            Token: token
        };
        
        if(config.custom.headers) {
            config.header = Object.assign({}, config.header, config.custom.headers)
        }
        
        config.url += (config.url.indexOf('?') > -1 ? '&' : '?' + `t=${Date.now()}`)
        
        config.method = config.method.toUpperCase()
        

        return config;
    },
    (config) => {
        return Promise.reject(config);
    }
);

http.interceptors.response.use((response) => { 
//省略部分代码
    

}, (error) => { /*  对响应错误做点什么 (statusCode !== 200)*/

    return Promise.reject(error)
})

uni.$http = http;

export default http

请求接口:

export function postFile(data, config) {
    return http.request({
        url: serviceAreaName + 'UploadFile',
        method: 'post',
        data,
        custom: config
    })
}

调用页面


selectFileNew(res) {
    let self = this;
    
    let { tempFiles } = res
    let file = tempFiles[0].file
    
    let config = {
        headers: { 'Content-Type': 'multipart/form-data' },
        timeout: 1000 * 60 * 10
    }

    let formData = new FormData();

    formData.append("file", file, file.name);
    formData.append('type', 1)
    
    fileUpload.postFile(formData, config).then(res => {
        
    })
    
    
},

错误提示:

request:fail parameter data. Expected Object, String, Array, ArrayBuffer, got FormData

根本没发请求就报错了,说明参数那部分错了,关键是我的接口是已经设置好的,上传的格式为multipart/form-data, data 名为 file 的二进制文件,网上搜了一大片都是很简单的赋值,连个上传的demo都找不到,哎。

阅读 4.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题