2

您好,我在将图像上传到云端(Backblaze B2)时遇到问题。

问题是,当我使用示例 Thunder 客户端上传文件时,一切正常并显示文件。

现在我的问题是,当我使用 JS 上传时,我不知道它为什么会损坏或出错。就像我上传图像并下载它一样,Windows 文件管理器会说:file format not supported.

我用 base64 img 解码器解码了文件,它工作正常并显示了图像。

const submitForm = () => {
        var reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = function(e) {
            // binary data
            let imagedata = reader.result.slice(reader.result.indexOf(',') + 1)

            console.log(imagedata);

            console.log(sha1(imagedata));
            const proxyurl = "https://cors-anywhere.herokuapp.com/";

            let datadf = fetch(proxyurl + 'url', {
                    method: 'POST',
                    headers: {
                        "Accept": "*/*",
                        "User-Agent": "Thunder Client (https://www.thunderclient.io)",
                        "X-Bz-File-Name": file.name,
                        "X-Bz-Content-Sha1": "do_not_verify",
                        "Authorization": "auth",
                        "Content-Type": "b2/x-auto",

                    },
                    body: imagedata,
                })
                .then((response) => {

                    return response.json();
                })
                .catch((err) => {
                    return {
                        status: 'fail',
                        message: 'API CALL ERROR',
                        error: err.message
                    };
                });
            datadf.then(res => console.log(res))
        };
        reader.onerror = function(e) {
            // error occurred
            console.log('Error : ' + e.type);
        };
4

1 回答 1

1

.readAsDataURL()将它读取的文件转换为 Base64,因此它可以表示为可以放入浏览器的 URL。一个很长的 URL,但仍然是一个 URL。

如果您将图像的 Base 64 表示形式存储到计算机上的文件中,然后尝试使用图像显示程序读取它,则操作将失败:“这看起来不像 .jpg、.png 或 . gif" 所以我不知道该怎么处理它。" 这就是您的 Windows 文件管理器错误消息的含义。

如果您希望文件的内容是原始的而不是 Base64 编码的,则需要使用.readAsArrayBuffer()

于 2021-09-23T11:16:14.943 回答