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();
我正在尝试使用 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();