當假如用 base64 上傳到 server 並且解碼之後~
在 server 看到的資料卻是 0KB ~ 這會是哪個地方出問題了?
我的用法是這樣
function uploadFileChunk(fileData, uploadInfo, destinationDirectory) {
let reader = new FileReader();
reader.onload = function () {
var binaryData = reader.result;
var base64String = window.btoa(binaryData);
base64 = base64String;
//console.log(base64);
base64upload(base64);
};
reader["readAsDataURL"](fileData);
function base64upload(base64) {
if (fileData.name !== "" && base64 !== "") {
//server
let param = {
FileName: "/var/www/html/sms_files/upload/" + fileData.name,
Base64FileData: base64,
};
SmsApis.Upload.post
.UploadFile(param)
.then(function (xhr) {
if (xhr.data.result[0] === "OK") {
console.log("上傳成功");
}
})
.catch(function (error) {});
}
}
我是有得到 base64 的編碼
然後 server 端也有解碼出來 所以才會有文件吧?
但是我到server查看的時候 卻發現檔案大小是 0KB
那會是哪個環節出了問題?
想要用BASE64傳資料很好。
不過要小心容量限制問題。
一般的from-data的檔案上傳限制,在PHP可以額外開放。
所以大多可以上傳很大的容量。
而會轉成base64的情況。不外乎大多是利用GET或是POST傳送居多。
但GET傳送的容量很小。
POST大多會有限制基本容量了。就算開大了。也會有變數容量問題。
所以這也是為何很多前輩說,小檔案還可以。但大檔案就最好還是不要這樣玩。
回頭來回答你的問題。
大多數來說你接到的B64的值還原後變成0KB。
大多數就是收取編碼不完全,造成無法正確解碼而生成空值。
所以才會是0KB。
再看一次你的碼 發現你是要圖檔轉base64, 我的碼並不適用,不過我找到了此資料:
https://stackoverflow.com/questions/10982712/convert-binary-data-to-base64-with-javascript
由我的碼裡抽出來的,你試看看。後端是 java 可以正常解開。
base64Encode: function(str) {
let ret = "";
if (str.length > 0) {
ret = btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
return String.fromCharCode("0x" + p1);
}));
}
return ret;
},