blob 上的错误内容类型无法打开 img / 文件已损坏

wrong content type on blob cant open img / file is damaged

我正在尝试使用 JS Blob() 函数下载文件,但我无法打开它。事先不清楚是什么类型,因为我得到了一个文件列表,用户可以选择下载什么。 Mac 表示格式可能已损坏,无法打开该文件。

我从中创建 blob 的 cURL 响应是一个二进制字符串(至少我相信是这样,因为当我转储它时,您只会看到随机符号和字符,就像您打开带有文本的图像时一样编辑器)

这是 Image code 我通过 cURL 的响应得到的

这是我下载这张图片的代码。

                var a;
            a = document.createElement('a');

            a.href = URL.createObjectURL(new Blob([JSON.stringify(response)]));

           // here i tried with and without JSON.stringify
           // also tried new Blob([JSON.stringify(response)],{type:'image/jpeg'}) or with * instead of jpeg, nothing works. Does anybody happen to know what mistake i am doing?

            a.download = data.data.name;
            a.style.display = 'none';
            document.body.appendChild(a);
            a.click();

几天来一直在努力解决这个问题,感谢您的帮助。

另外,当我(在 Mac 终端)执行以下命令时:

file test.jpeg

它returns

test.jpeg: data

此致

编辑:我的 PHP 代码

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://myapi.com/webapp/api/v1/document/id/" . $id . "/download");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('AuthenticationToken:' . $token));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);


curl_close($ch);
echo $output;

您可以尝试将图片数据序列化为base64字符串传给客户端

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://myapi.com/webapp/api/v1/document/id/" . $id . "/download");
curl_setopt($ch, CURLOPT_HTTPHEADER, array("AuthenticationToken:" . $token));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);

$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);

curl_close($ch);

$base64 = "data:/" . $contentType . ";base64," . base64_encode($output);

echo $base64;

在这种情况下,在您的客户端,您只需像这样放置 href 的响应文本:

const a = document.createElement('a');
a.href = response;
a.download = data.data.name;
a.style.display = 'none';
document.body.appendChild(a);
a.click();