1 个数组中的多个 Base64 图像导致覆盖
Multiple Base64 image within 1 array causes overriding
假设我想上传 2 张图片到 ajax,我将使用这种格式发送它们
{ "base64StringName:" : "[ {"1": "base64_1"}, {"2" : "base64_2"} ]"}
所以它是一个包含 base64 字符串对象数组的对象
为此,我需要创建一个数组,并在该数组内将 json 个对象推入其中。
这是我的代码:
<script>
var test ='';
var imageArray =[];
var imageObject ={};
$('#inputFileToLoad').on('change', function(){
imageArray.length = 0;
fileCount = this.files.length;
for(i = 0; i < fileCount; i++){
var file = document.querySelector('#inputFileToLoad').files[i];
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
test = reader.result.split(',')[1];
console.log(test);
imageObject[i] = test;
imageArray.push(imageObject);
};
reader.onerror = function (error) {
alert('Error: ', error);
};
}
});
$('#inputFileToLoadButton').on('click', function(){
console.log(imageArray);
$.ajax({
url:"some url",
method:"POST",
data: {
"base64String": imageArray
}
,success: function () {
swal("Success!","Upload Finished!","success");
//add redirect!
},
error: function (jqXHR) {
swal("Error",jqXHR.responseText, "error");
}
});
});
</script>
但是,我遇到了一个问题,数组中的第一个对象不知何故被覆盖了。
它变成了
{ "base64StringName:" : "[ {"1": "base64_2"}, {"2" : "base64_2"} ]"}
此外,当我在 console.log(test);
打印出第一个 base64 编码文件时,它是未定义的,但是当我打印出第二个 base64 编码文件时,它只打印第二个文件。
试试这个:
var test = '';
var imageArray = [];
var imageObject;
$('#inputFileToLoad').on('change', function() {
imageArray.length = 0;
fileCount = this.files.length;
for (i = 0; i < fileCount; i++) {
debugger;
var file = document.querySelector('#inputFileToLoad').files[i];
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function() {
test = this.result.split(',')[1];
imageObject = {};
imageObject[index] = test;
imageArray.push(imageObject);
}.bind({
index: i
});
reader.onerror = function(error) {
alert('Error: ', error);
};
}
});
假设我想上传 2 张图片到 ajax,我将使用这种格式发送它们
{ "base64StringName:" : "[ {"1": "base64_1"}, {"2" : "base64_2"} ]"}
所以它是一个包含 base64 字符串对象数组的对象 为此,我需要创建一个数组,并在该数组内将 json 个对象推入其中。
这是我的代码:
<script>
var test ='';
var imageArray =[];
var imageObject ={};
$('#inputFileToLoad').on('change', function(){
imageArray.length = 0;
fileCount = this.files.length;
for(i = 0; i < fileCount; i++){
var file = document.querySelector('#inputFileToLoad').files[i];
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
test = reader.result.split(',')[1];
console.log(test);
imageObject[i] = test;
imageArray.push(imageObject);
};
reader.onerror = function (error) {
alert('Error: ', error);
};
}
});
$('#inputFileToLoadButton').on('click', function(){
console.log(imageArray);
$.ajax({
url:"some url",
method:"POST",
data: {
"base64String": imageArray
}
,success: function () {
swal("Success!","Upload Finished!","success");
//add redirect!
},
error: function (jqXHR) {
swal("Error",jqXHR.responseText, "error");
}
});
});
</script>
但是,我遇到了一个问题,数组中的第一个对象不知何故被覆盖了。 它变成了
{ "base64StringName:" : "[ {"1": "base64_2"}, {"2" : "base64_2"} ]"}
此外,当我在 console.log(test);
打印出第一个 base64 编码文件时,它是未定义的,但是当我打印出第二个 base64 编码文件时,它只打印第二个文件。
试试这个:
var test = '';
var imageArray = [];
var imageObject;
$('#inputFileToLoad').on('change', function() {
imageArray.length = 0;
fileCount = this.files.length;
for (i = 0; i < fileCount; i++) {
debugger;
var file = document.querySelector('#inputFileToLoad').files[i];
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function() {
test = this.result.split(',')[1];
imageObject = {};
imageObject[index] = test;
imageArray.push(imageObject);
}.bind({
index: i
});
reader.onerror = function(error) {
alert('Error: ', error);
};
}
});