【发布时间】:2021-02-03 11:09:14
【问题描述】:
您好,我必须在服务器上发送多张图像,但我必须一次发送一张,我使用此函数将图像转换为 base64 字符串,然后发送它
function RiduciImgFile2(input) {
let ido = 0
if (input.files && input.files[0]) {
const canvas = document.getElementById("canvas");
var file = input;
var img = document.createElement("img");
var reader = new FileReader();
reader.onload = function (e) {
img.src = e.target.result;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
img.onload = function (w) {
var MAX_WIDTH = 1024;
var MAX_HEIGHT = 1024;
var width = img.width;
var height = img.height;
if (width > height) {
if (width > MAX_WIDTH) {
height *= MAX_WIDTH / width;
width = MAX_WIDTH;
}
} else {
if (height > MAX_HEIGHT) {
width *= MAX_HEIGHT / height;
height = MAX_HEIGHT;
}
}
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, width, height);
var dataurl = canvas.toDataURL("image/png");
var Dati = [];
Dati.push(dataurl, ido)
$.ajax({
type: "POST",
url: 'Run?pr=save_photo',
data: JSON.stringify(Dati),
success: function (r) {
// OK
},
error: function (e) {
// ERROR
},
traditional: true
});
};
};
reader.readAsDataURL(file);
}
}
有没有办法通过承诺来做这样的事情
function files(){
let f = document.querySelector("#input").files;
for(let i = 0; i< f.files.length; i++){
RiduciImgFile2(f[i])
}
}
并等待函数 RiduciImgFile2() 完成请求?或者可能有递归方式?
【问题讨论】:
-
为什么你必须一次发送一个?
-
因为如果我发送太多(或太大)图像,服务器会给我一个超时错误
标签: ajax recursion promise async-await fetch