Javascript 将XMLHTTPResponseText解码为dataUrl,而不在服务器端使用基本编码
如何在客户端将XMLHTTPRequest的纯文本响应转换为dataUrl 图像数据正在从服务器发送到Iframe,检索数据的唯一选项是GET请求中的默认编码数据* 我对服务器没有任何控制权。我无法指定请求的Javascript 将XMLHTTPResponseText解码为dataUrl,而不在服务器端使用基本编码,javascript,image,character-encoding,xmlhttprequest,Javascript,Image,Character Encoding,Xmlhttprequest,如何在客户端将XMLHTTPRequest的纯文本响应转换为dataUrl 图像数据正在从服务器发送到Iframe,检索数据的唯一选项是GET请求中的默认编码数据* 我对服务器没有任何控制权。我无法指定请求的overrideMimeType或响应类型 我尝试对返回的数据进行utf8编码: const utf8=newtextcoder(); const bytes=utf8.encode(imageDataAsText); //转换为数据url const fr=new FileReader()
overrideMimeType
或响应类型
我尝试对返回的数据进行utf8编码:
const utf8=newtextcoder();
const bytes=utf8.encode(imageDataAsText);
//转换为数据url
const fr=new FileReader();
const blob=new blob([bytes],{type:attachment.metadata.mediaType});
fr.onload=(e)=>{
setImageData(fr.result为字符串);
};
fr.readAsDataURL(blob);
通过字符代码转换也不起作用:
let bytesv2=[];//字符码
对于(变量i=0;i>0]);
}
控制台输出显示的原始数据。我在这里使用的数据的实际默认编码是什么?
背景:
*所讨论的数据在atlassian(jira/Confunce)生态系统内的iframe内接收。它们不支持将二进制数据从父帧传输到iframe,也不支持我自己提出请求,因为授权流需要存储在父页面上的cookie。所有提及覆盖某些编码或在服务器端更改编码的其他选项都不适用于此特定情况。使用XMLHttpRequest获取二进制数据时,不要将其作为字符串返回。使用(如果要读取/修改,请使用arrayBuffer) 最好使用fetchapi而不是旧的XMLHttpRequest来获取二进制文件 它在网络工作者和服务器中更受欢迎。它也更简单,基于承诺
fetch(url)
.then(res => res.blob())
.then(blob => { ... })
为什么您需要它成为base64 url?如果只是显示一个
的预览,那么这将浪费时间、cpu和内存。
最好是:
请看我问题的第二部分。在我的例子中,我无法设置请求的responseType,只能使用文本。(这是由于一些时髦的iframe父桥)URL.createObjectURL(blob)是一个很好的建议。谢谢,错过了那一部分,如果你自己不能提出请求,那你就不走运了。我恐怕除了提出支持二进制数据的功能请求之外,我没有其他答案
fetch(url)
.then(res => res.blob())
.then(blob => { ... })
img.src = URL.createObjectURL(blob)