分享一个简单的FormData实现

只是实现了文本形式的转换,就当作是提供一种思路,抛砖引玉。

TestFormData.zip (957 字节)

代码很简单

Mark

有没有js版本的

let CCFormData = cc.Class({
extends:Object,
name:“CCFormData”,
ctor(){
let _boundary_key = arguments[0];
this._boundary = ‘–’+_boundary_key;
this._end_boundary = this._boundary+’–\r\n’;
this._result = [];
},

properties:{
    _boundary_key:null,
    _boundary:null,
    _end_boundary:null,
    _result:null,
    boundary_key:{
        get(){
            return this._boundary_key;
        }
    },
    boundary:{
        get(){
            return this._boundary;
        }
    },
    end_boundary:{
        get(){
            return this._end_boundary;
        },
    },
    result:{
        get(){
            return this._result;
        },
    },
},
append(key,val){
    this._result.push(this._boundary + '\r\n');
    this._result.push('Content-Disposition: form-data; name="' + key + '"' + '\r\n\r\n');
    this._result.push(val);
    this._result.push('\r\n');
},
appendFile(name,data,ext){
    let type = "application/x-www-form-urlencoded";
    let filename =  "upload."+ext;

    this._result.push(`${this._boundary}\r\n`);
    this._result.push(`Content-Disposition: form-data; name="${name}"; filename="${filename}"\r\n`);
    this._result.push(`Content-Type: ${type}\r\n`);
    this._result.push("\r\n");
    this._result.push(data);
    this._result.push("\r\n");

},
getArrayBuffer(){
    this._result.push('\r\n' + this._end_boundary);
    let charArr = [];

    for (let i = 0; i < this._result.length; i++) { // 取出文本的charCode(10进制
        let item = this._result[i];
        if( typeof(item)=='string'){
            for (let s = 0; s < item.length; s++){
                charArr.push(item.charCodeAt(s));
            }
        }else{
            for (let j = 0; j < item.length; j++){
                charArr.push(item[j]);
            }
        }
        
    }
    let array = new Uint8Array(charArr);
    return array.buffer;
},
getStrBuffer(){
    this._result.push('\r\n' + this._end_boundary);
    let charArr = "";

    for (let i = 0; i < this._result.length; i++) { // 取出文本的charCode(10进制
        let item = this._result[i];
        charArr = charArr+ item;
    }
    
    return charArr;
},

})

module.exports = CCFormData;

1赞

js版,我写的,测试通过

请问要append 图片档案要怎么改?

用原生吧,很多封装好的可以直接用

原生要写两套,但感觉就剩最后一步了
在 public get arrayBuffer(): ArrayBuffer
charArr.push(this._result.charCodeAt(i)); 如果是字串类型可以
但档案要怎么用,有大神可以协助一下吗