fix(streamlit): Fix btoa crash on UTF-8 .py file upload

Read all files as ArrayBuffer and use Uint8Array chunked encoding
for base64, replacing btoa(text) which throws DOMException on
non-ASCII characters (accents, CJK, etc).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
CyberMind-FR 2026-02-04 09:40:51 +01:00
parent db486a56ad
commit 8691a5e048

View File

@ -615,18 +615,12 @@ return view.extend({
var reader = new FileReader(); var reader = new FileReader();
reader.onload = function(e) { reader.onload = function(e) {
var content; var bytes = new Uint8Array(e.target.result);
if (isZip) { var chunks = [];
var binary = e.target.result; for (var i = 0; i < bytes.length; i += 8192) {
var bytes = new Uint8Array(binary); chunks.push(String.fromCharCode.apply(null, bytes.slice(i, i + 8192)));
var chunks = [];
for (var i = 0; i < bytes.length; i += 8192) {
chunks.push(String.fromCharCode.apply(null, bytes.slice(i, i + 8192)));
}
content = btoa(chunks.join(''));
} else {
content = btoa(e.target.result);
} }
var content = btoa(chunks.join(''));
var uploadFn = isZip ? api.uploadZip(name, content, null) : api.uploadApp(name, content); var uploadFn = isZip ? api.uploadZip(name, content, null) : api.uploadApp(name, content);
@ -645,11 +639,7 @@ return view.extend({
}); });
}; };
if (isZip) { reader.readAsArrayBuffer(file);
reader.readAsArrayBuffer(file);
} else {
reader.readAsText(file);
}
}, },
renameApp: function(id, currentName) { renameApp: function(id, currentName) {