不支持文件格式,但使用 base64 解码时它工作正常

File format not supported but when decoding it with base64 it works fine

您好,我在将图片上传到云端时遇到问题 (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);
        };

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

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

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