FormData,cocos中可以使用formdata上传文件吗?

cocos中使用XMLHttpRequest支持 formdata 类型的表格上传吗?如果不支持,一般如何上传图片或者音频呢?

@jare 求助官方

可以,自己模拟格式

请问有相关案例可以参考一下吗?

//这是一个简单的板栗
//var formData = new TestFormData();
//formData.append('accountId', '123');
//var xhr = cc.loader.getXMLHttpRequest();
//xhr.timeout = 3000;
//xhr.open('POST', 'http://xxxxxx', true);

//记得在头部带上boundary,这里注意一定要和类里面的 _boundary_key 保持一致
//xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=testformdata');

//xhr.onload = function (e) {
//    if (xhr.readyState === 4 && (xhr.status >= 200 && xhr.status < 300)) {
//        console.log("xhr.responseText::", xhr.responseText)
//    }
//};
//// ArrayBuffer
//xhr.send(formData.arrayBuffer);

export class TestFormData {
private _boundary_key: string = 'testformdata';
private _boundary: string;
private _end_boundary: string;
private _result: string;

constructor() {
    this._boundary = '--' + this._boundary_key;
    this._end_boundary = this._boundary + '--';
    this._result = "";
}

public append(key: string, value: string,filename?:string) {
    this._result += this._boundary + '\r\n';
    if (filename){
        this._result += 'Content-Disposition: form-data; name="' + key + '"' + '; filename="'+ filename + '"'+'\r\n\r\n';
    }else{
        this._result += 'Content-Disposition: form-data; name="' + key + '"' + '\r\n\r\n';
    }
    
    this._result += value + '\r\n';
}

public get arrayBuffer(): ArrayBuffer {
    this._result += '\r\n' + this._end_boundary;
    let charArr: Array<any> = [];

    for (var i = 0; i < this._result.length; i++) { // 取出文本的charCode(10进制)
        charArr.push(this._result.charCodeAt(i));
    }

    let array: Uint8Array = new Uint8Array(charArr);
    return array.buffer;
}
}
2赞

base64

非常感谢,实测可以使用,结帖

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。