【问题标题】:How to send images through Worklight server without base64 encoding?如何在没有 base64 编码的情况下通过 Worklight 服务器发送图像?
【发布时间】:2025-12-05 23:50:02
【问题描述】:

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

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

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 Server,您唯一的方法是 Worklight Adapters。
  • 如果您担心由于编码导致负载大小增加,您可以使用invokeProcedure 中的compressResponse 选项请求压​​缩响应
  • 感谢 cmets。 @IdanAdar,这就是我想知道的,如果我可以使用适配器发送图像而不进行编码。 @Srik,但压缩只会应用于响应(JSON),而不是我想通过 HTTP POST 发送的图像。
  • 对不起,我误解了你的问题。目前,我想不出一种在没有 base64 编码的情况下将二进制数据发送到 Worklight Server 的方法,因为 JavaScript 不提供处理二进制流的直接方法。
  • @felipeh 有什么更新吗?任何解决方案?在阅读gonzalo123.com/2013/10/28/… 时,我还可以看到 base64 图像也会导致设备上的内存问题。 Cordova 文件传输能否成为解决方案的一部分?

标签: ibm-mobilefirst worklight-adapters worklight-server


【解决方案1】:

目前,Worklight 适配器不支持以二进制形式发送数据。

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

【讨论】:

最近更新 更多