我们的应用程序下载了一个zip文件,但响应是二进制文件。
所以我做的是将它转换为base64。它在大小为87.7KB
时有效,但在响应大小为183KB
时发生错误。
错误为Uncaught RangeError: Maximum call stack size exceeded
有问题的行是
btoa(String.fromCharCode.apply(null, new Uint8Array(blob)))
根据this answer,String.fromCharCode.apply()
必须替换为TextEncoder
。
所以我把它改成了
btoa(new TextDecoder('utf-8').decode(new Uint8Array(blob)))
但是我收到了错误。
Uncaught DOMException: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.
我使用此answer
的最顶部片段再次更改了它现在新代码
btoa(unescape(encodeURIComponent(new TextDecoder('utf-8').decode(new Uint8Array(blob)))))
现在可以下载,但下载的zip文件已损坏。
可以看到整个代码here
答案 0 :(得分:14)
我从另一个问题得到了答案
To get latest post with url:
<?php
$args = array( 'numberposts' => '1', 'category' => CAT_ID );
$recent_posts = wp_get_recent_posts( $args );
foreach( $recent_posts as $recent ){
echo '<a href="' . get_permalink($recent["ID"]) . '">Latest Post</a>';`enter code here`
}
?>
Hope this helps .
答案 1 :(得分:0)
https://stackoverflow.com/a/40077712/6582356
function blobToB64(data) {
if ('TextDecoder' in window) {
// Decode as UTF-8
var dataView = new DataView(data);
var decoder = new TextDecoder('utf8');
return btoa(decoder.decode(dataView));
} else {
// Fallback
return btoa(new Uint8Array(data).reduce((data, byte) =>
data + String.fromCharCode(byte),
''))
}
}
https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder
这似乎有更好的表现