Ibm mobilefirst 如何在不使用base64编码的情况下通过Worklight server发送图像?

Ibm mobilefirst 如何在不使用base64编码的情况下通过Worklight server发送图像?,ibm-mobilefirst,worklight-adapters,worklight-server,Ibm Mobilefirst,Worklight Adapters,Worklight Server,我正在尝试了解如何使用Worklight适配器将图像发送到后端服务器。 我知道我可以使用Base64编码通过Worklight适配器发送它们,但这意味着服务器之间的通信量会增加30%左右,并且会产生一些不必要的处理开销 目前,我正在使用Phonegap FileTransfer库,如下所示,但这会在客户端和后端服务器之间创建直接连接,而不是像我所希望的那样通过Worklight server var options = new FileUploadOptions(); options.fileK

我正在尝试了解如何使用Worklight适配器将图像发送到后端服务器。 我知道我可以使用Base64编码通过Worklight适配器发送它们,但这意味着服务器之间的通信量会增加30%左右,并且会产生一些不必要的处理开销

目前,我正在使用Phonegap FileTransfer库,如下所示,但这会在客户端和后端服务器之间创建直接连接,而不是像我所希望的那样通过Worklight server

var options = new FileUploadOptions();
options.fileKey="file";
options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
options.mimeType="image/jpeg";

var headers = {"Content-Type": "image/jpeg"};
options.headers = headers;

var ft = new FileTransfer();
ft.upload(imageURI, encodeURI(host + "/images"), imageUploadSuccess, imageUploadFail, options);

function imageUploadSuccess(r) {
    WL.Logger.debug("Submit success! HTTP Status Code = " + r.responseCode);
    WL.Logger.debug("Response = " + r.response);
    WL.Logger.debug("Bytes sent = " + r.bytesSent);
    $.mobile.changePage('#SuccessPage');
}
function imageUploadFail(error) {
    WL.Logger.debug("submit error! source = " + error.source);
    WL.Logger.debug("target = " + error.target);
    $.mobile.changePage('#FailPage');
}
我有办法做到吗

先谢谢你

--编辑--


出现的另一个问题是,当我的后端服务器接收到该文件时,它似乎已损坏,无法作为映像读取。

此时,Worklight适配器不支持以二进制形式发送数据


这意味着当前您唯一的选项是您不喜欢的选项,即对图像文件进行base64编码并将生成的字符串存储在数据库中,以及在需要使用时对其进行base64解码

如果您想通过Worklight服务器,唯一的方法是使用Worklight适配器。如果您担心的是由于编码而导致的负载大小增加,您可以使用
invokeProcess
中的
compressResponse
选项请求压缩响应,谢谢您的评论@IdanAdar,这就是我想知道的,如果我可以使用适配器发送图像而不进行编码@Srik,但压缩将仅应用于响应(JSON),而不应用于我希望通过HTTP POST发送的图像。抱歉,我误解了您的问题。目前,我想不出一种不使用base64编码将二进制数据发送到Worklight Server的方法,这是因为JavaScript不提供直接处理二进制流的方法。@felipeh有更新吗?有解决办法吗?阅读时,我还可以看到base64图像也会导致设备内存问题。Cordova文件传输可以成为解决方案的一部分吗?我正在使用ibm mobile first 8.0,我可以在有效负载内使用javascript客户端API将二进制数据发送到适配器吗?这可能会有所帮助: