asdfxed 发表于 2022-12-30 09:55:11

请教如何在获取fetch response.text()之后转为blob

本帖最后由 asdfxed 于 2022-12-30 11:11 编辑

在某些特殊情况下, 我只能获取`text`, 但是后续我需要转为`blob`或者`arraybuffer`, 请问如何处理呢
测试脚本如下, 需要实现的是打开页面`https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png`之后, 下载的图片是和网页显示的一样, 而目前脚本下载的图片是无效的

```
// ==UserScript==
// @name         测试fetch
// @namespace    http://tampermonkey.net/
// @version      0.1
// @descriptiontry to take over the world!
// @author       You
// @match      https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png
// @icon         https://www.google.com/s2/favicons?sz=64&domain=baidu.com
// @grant      none
// ==/UserScript==

fetch('https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png')
    .then(res=>res.text()) // 这里不能改, 只能res.text()
    .then(text=>{

    // 可修改区域开始
    let blob = new Blob();
    // 可修改区域结束

    // 下面只是测试导出图片是否正确
    const a = document.createElement("a");
    const objectUrl = window.URL.createObjectURL(blob);
    a.download = '测试图片.jpg';
    a.href = objectUrl;
    a.click();
    window.URL.revokeObjectURL(objectUrl);
    a.remove();

}).catch(e=>{console.log(e);});

`

steven026 发表于 2022-12-30 10:24:08

fetch('https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png')
    .then(res=>res.blob())

asdfxed 发表于 2022-12-30 10:27:37

steven026 发表于 2022-12-30 10:24


不能改这里, 只能res.text()

李恒道 发表于 2022-12-30 14:45:41

不太理解为啥不能动其他函数...

asdfxed 发表于 2022-12-30 15:16:20

李恒道 发表于 2022-12-30 14:45
不太理解为啥不能动其他函数...

就某些特殊限制, 只能获取res.text(){:4_88:}

李恒道 发表于 2022-12-30 16:57:49

asdfxed 发表于 2022-12-30 15:16
就某些特殊限制, 只能获取res.text()

这个帮不到哥哥了...
直觉来说可能图片转成text的时候已经造成字符损坏了吧...
对编码不太熟悉{:4_115:}

asdfxed 发表于 2022-12-30 17:13:16

李恒道 发表于 2022-12-30 16:57
这个帮不到哥哥了...
直觉来说可能图片转成text的时候已经造成字符损坏了吧...
对编码不太熟悉 ...

没事, 我更不熟悉哈哈{:4_106:}

cxxjackie 发表于 2022-12-31 12:19:09

图片转字符串以后会对字节流造成不可逆的破坏,原因是utf8编码过程中,一些不同的字节会被转换成相同的结果,比如你输出text的话可以看到一堆�,这些�实际上是不同的,在utf8编码下被视为相同,这导致转换过程不可逆。

脚本体验师001 发表于 2022-12-31 13:35:51

cxxjackie 发表于 2022-12-31 12:19
图片转字符串以后会对字节流造成不可逆的破坏,原因是utf8编码过程中,一些不同的字节会被转换成相同的结果 ...

已经造成了不可逆的破坏,为什么还要去想着修复?
这个帖子看了好几遍了,// 这里不能改, 只能res.text(),为什么不能改呀大佬们都不理解,这是硬生生被尿憋死的姿势。
@cxxjackie 哥哥龙体无恙否,几天不看你发言还以为你像李恒道一样哈勒西了

cxxjackie 发表于 2022-12-31 19:46:25

脚本体验师001 发表于 2022-12-31 13:35
已经造成了不可逆的破坏,为什么还要去想着修复?
这个帖子看了好几遍了,// 这里不能改, 只能res.text() ...

没阳,只是感冒了,而且论坛这几天没什么贴子啊。
页: [1] 2
查看完整版本: 请教如何在获取fetch response.text()之后转为blob