当前位置: 首页 > 知识库问答 >
问题:

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

松旭
2023-06-01

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都找不到,哎。

共有1个答案

尉迟栋
2023-06-01

上传请使用上传API �� #upload - 3.x文档 | luch-request

这个是对应的 Issue 问题 �� 请指教,关于file文件上传问题 · Issue #17 · lei-mu/luch-request

 类似资料:
  • 问题内容: 选择图像,doc或pdf后,我想将它们通过okhttp3。如何进行此操作? 并在okhttp 3中 显示的错误是 谢谢。 问题答案: 所以我自己回答这个问题。 因此,我首先将输出流打开到一个临时文件。 扩展名取决于mime类型。您可以通过以下方式找到mime类型 现在从文件读取并将其内容写入临时文件 现在写入文件 最后 成功之后的最后

  • 问题内容: 我使用2个文件index.js,upload.php尝试通过ajax上传文件(img),如果成功追加到div 。 但是它不起作用,有几个问题,下面我的代码有什么建议吗? 谢谢。 upload.php 1. 还需要添加吗? 2. 并检查$ _FILES的大小或tmp_name是否仍使用? index.js 3.这几行是对的吗? 4.我错过或错了什么吗? 问题答案: 在其构造函数中接受一个

  • 问题内容: 我想使用将文件(特别是图像)上传到REST Server 。我已经导入/添加了构建路径和。而且我在堆栈跟踪中收到以下错误。 这有效吗? HTTP POST代码 堆栈跟踪 问题答案: 您似乎缺少依赖项。 我有,,并用和在我的类路径罐子。 我也使用而不是使用header属性。 查看Internet媒体类型以了解更多详细信息

  • 我有一个问题,通过我的php网站上传一个mp3文件。它允许我加载2MB以下的所有内容,但没有超过。它以前工作过 托管提供商还增加了fastcgi超时限制。htaccess文件,并添加以下内容:php\u value max\u execution\u time 300, 我们还增加了fastcgi超时限制,并添加了一个。htaccess文件:php\u值上传\u最大\u文件大小20M php\u值

  • 问题内容: 我正在考虑将WCF用于一个项目,该项目需要人们能够将大文件(64MB-1GB)上传到我的服务器。我将如何使用WCF处理此问题,可能还具有恢复上传的功能。 为了处理更大的客户群,我想通过WCF测试JSON。这将如何影响文件上传?可以通过JSON完成,还是需要将上传部分切换到REST? 问题答案: 如果要上传大文件,则肯定需要查看WCF流模式。 基本上,您可以更改绑定上的传输模式;默认情况