【发布时间】:2021-05-26 16:04:20
【问题描述】:
我正在努力上传我想通过 PUT 请求保存的文件。 我用解决方案更新了问题。
我有一个表单,允许在不同的字段中上传多个图像,但也可以在其他字段中上传字符串:
我遍历所有字段以收集 JSON 中的信息,然后将它们推送到我的 API:
keys 是一个带有 JSON 键名的字典(API 检查这些键),例如:name|STR、price|FLOAT、ppic|IMG。
$('#checkButton').on('click', function( event ) {
let form = document.querySelector('#productForm');
let nbr = document.querySelector('#productdata').getAttribute("pid")
let return_dict = {"number": nbr};
const pendings = ["name", "pic"].map(async function ( key ) {
return_dict["name"] = form.elements[0].value;
return_dict["pic"] = await img_2_b64(form.elements[1]);
});
Promise.all(pendings).then((values) => {
write_2_DB_with_ajax_call ( return_dict )
});
});
如果密钥将字段标识为 IMG,我想将其转换为 base64 并保存 - 这是我的解决方案:
function img_2_b64( element ) {
return new Promise((resolve, reject) => {
let file = element.files[0];
let reader = new FileReader();
reader.onloadend = function(e) {
resolve(e.target.result);
};
reader.onerror = function() {
reject();
};
reader.readAsDataURL(file);
});
【问题讨论】:
-
我认为你真的应该考虑切换到上传分段上传(使用formdata)或其他一些二进制协议,base64 + json 是个坏主意
-
为什么 base64 和 json 是个坏主意?请您详细说明一下。
-
1,浪费时间编码/解码。 2、体积较大。 3,向上/向下流格式错误,4. 不能很好地处理大文件(500mb+)。 5. 使用更多 RAM,6. 更多带宽成本
-
我的垃圾是 kb 大小,但感谢您的输入。
标签: javascript asynchronous callback