【问题标题】:What Format should FormData have?FormData 应该有什么格式?
【发布时间】:2021-12-27 15:43:10
【问题描述】:

所以我想将test JSON 上传到 arweave。 transactionenv 的附加工作正常,但是当我尝试附加 bufferTest 时出现此错误

Unhandled Rejection (TypeError): Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'.

我尝试这样做:data.append('file[]', new Blob(bufferTest), 'metadata.json');,但它只是像这样上传 UTF8 中的缓冲区值:1.2334116101115117e+39。 我实际上只是从 Metaplex candy-machine-v2 复制了这个。他们也只是附加缓冲区。 我不知道这是否与 React 或我只是愚蠢有关。

const test = { "test": "test" };
const bufferTest: any = Buffer.from(JSON.stringify(test)); //metadata as buffer

export default function Test(props:any){

    //...
    const data = new FormData();
    data.append('transaction', txID!); // Transaction ID
    data.append('env', env);  // env = devnet
    data.append('file[]', bufferTest, 'metadata.json');

    const result = await upload(data);
    //...

}
async function upload(data: FormData) {
    return await (
        await fetch(ARWEAVE_UPLOAD_ENDPOINT, {
            method: 'POST',
            // @ts-ignore
            body: data,
        })
    ).json();
}

【问题讨论】:

    标签: javascript reactjs ajax form-data


    【解决方案1】:

    您需要在输入文件中选择的所有文件上放置一个 for 循环,如下所示:

    var len = document.getElementById('XXXX').files.length;
    for (var i = 0; i < len ; i++) {
        fd.append("file[]", document.getElementById('XXXX').files[i]);
    }
    

    让我知道它是否有效

    【讨论】:

    • 只是一个文件。我不知道为什么有方括号(糖果机器代码也有;删除它们不会改变任何东西)但我只想上传具有 JSON 结构的“测试”变量。所以它应该只是'data.append('file',bufferTest,'metadata.json');'?为什么要getElementById?
    • 现在我只看到'null',我尝试上传一个更大的 JSON 对象。
    • 您使用 document.getElementById 来获取上传的文件,在后端您可以对其进行操作并读取其中的内容
    猜你喜欢
    • 2015-02-11
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    相关资源
    最近更新 更多