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,
        });
    }