MobileFirst 7.0 图片上传和 javascript 适配器参数大小限制
MobileFirst 7.0 image upload and javascript adapter parameters size limit
so上好像已经有similar question了,确实遇到了
我们正在调用适配器并将编码的 base64 字符串发送到后端。对于小于 1Mb 的小图片,一切正常。但如果图像尺寸较大(例如 4Mb,只是最终用户 iPhone 相册中的一张普通照片),它就会卡住适配器调用错误。调试后我还发现,在上传大图的情况下,适配器永远不会进入后端业务逻辑,但在上传小图片的情况下可以。
一些代码片段可能如下所示:
var base64Str = "";
var reader = new FileReader();
reader.onload = function(e) {
base64Str = e.target.result;
preview.setAttribute('src', base64Str );
uploadImage(picUuid, base64Str);
}
//calling the HTTP image upload adapter
function uploadImage(uuid, base64Data){
WL.Logger.debug("base64Data:" + base64Data);
var invocationData = {
adapter : 'ImageUploadAdapter',
procedure : 'uploadImage',
parameters : [uuid, base64Data]
};
WL.Client.invokeProcedure(invocationData, {
onSuccess : uploadImageSuccess,
onFailure : uploadImageFailure,
});
}
除了现有的 JavaScript 适配器之外,MobileFirst Platform 7.0 还引入了 Java 适配器。
使用 Java 适配器时,使用 Java 脚本适配器时可以操作的文件大小没有这样的限制,数据可以作为二进制处理,而不是编码为 base64 等。
换句话说,Java脚本适配器不支持多部分,而在 Java 适配器(基于 JAX-RS 规范)中可以。
您可以在此处阅读更多相关信息:
function encodeImageFileAsURL() {
var filesSelected = document.getElementById("inputFileToLoad").files;
if (filesSelected.length > 0) {
var fileToLoad = filesSelected[0];
var fileReader = new FileReader();
fileReader.onload = function(fileLoadedEvent) {
var srcData = fileLoadedEvent.target.result; // <--- data: base64
var newImage = document.createElement('img');
newImage.src = srcData;
alert(srcData);
document.getElementById("imgTest").innerHTML = newImage.outerHTML;
alert("Converted Base64 version is " + document.getElementById("imgTest").innerHTML);
console.log("Converted Base64 version is " + document.getElementById("imgTest").innerHTML);
uploadImage(srcData);
}
fileReader.readAsDataURL(fileToLoad);
}
}
//calling the HTTP image upload adapter
function uploadImage(srcData){
WL.Logger.debug("srcData:" + srcData);
var invocationData = {
adapter : 'ImageUploadAdapter',
procedure : 'uploadImage',
parameters : [srcData]
};
WL.Client.invokeProcedure(invocationData, {
onSuccess : uploadImageSuccess,
onFailure : uploadImageFailure,
});
}
so上好像已经有similar question了,确实遇到了
我们正在调用适配器并将编码的 base64 字符串发送到后端。对于小于 1Mb 的小图片,一切正常。但如果图像尺寸较大(例如 4Mb,只是最终用户 iPhone 相册中的一张普通照片),它就会卡住适配器调用错误。调试后我还发现,在上传大图的情况下,适配器永远不会进入后端业务逻辑,但在上传小图片的情况下可以。
一些代码片段可能如下所示:
var base64Str = "";
var reader = new FileReader();
reader.onload = function(e) {
base64Str = e.target.result;
preview.setAttribute('src', base64Str );
uploadImage(picUuid, base64Str);
}
//calling the HTTP image upload adapter
function uploadImage(uuid, base64Data){
WL.Logger.debug("base64Data:" + base64Data);
var invocationData = {
adapter : 'ImageUploadAdapter',
procedure : 'uploadImage',
parameters : [uuid, base64Data]
};
WL.Client.invokeProcedure(invocationData, {
onSuccess : uploadImageSuccess,
onFailure : uploadImageFailure,
});
}
除了现有的 JavaScript 适配器之外,MobileFirst Platform 7.0 还引入了 Java 适配器。
使用 Java 适配器时,使用 Java 脚本适配器时可以操作的文件大小没有这样的限制,数据可以作为二进制处理,而不是编码为 base64 等。
换句话说,Java脚本适配器不支持多部分,而在 Java 适配器(基于 JAX-RS 规范)中可以。
您可以在此处阅读更多相关信息:
function encodeImageFileAsURL() {
var filesSelected = document.getElementById("inputFileToLoad").files;
if (filesSelected.length > 0) {
var fileToLoad = filesSelected[0];
var fileReader = new FileReader();
fileReader.onload = function(fileLoadedEvent) {
var srcData = fileLoadedEvent.target.result; // <--- data: base64
var newImage = document.createElement('img');
newImage.src = srcData;
alert(srcData);
document.getElementById("imgTest").innerHTML = newImage.outerHTML;
alert("Converted Base64 version is " + document.getElementById("imgTest").innerHTML);
console.log("Converted Base64 version is " + document.getElementById("imgTest").innerHTML);
uploadImage(srcData);
}
fileReader.readAsDataURL(fileToLoad);
}
}
//calling the HTTP image upload adapter
function uploadImage(srcData){
WL.Logger.debug("srcData:" + srcData);
var invocationData = {
adapter : 'ImageUploadAdapter',
procedure : 'uploadImage',
parameters : [srcData]
};
WL.Client.invokeProcedure(invocationData, {
onSuccess : uploadImageSuccess,
onFailure : uploadImageFailure,
});
}