1

我正在使用Titanium Appcelerator开发一个跨平台的移动应用程序。这个应用程序是基于Sakai的,在这个应用程序中我必须将图像发送到服务器。

客户端我正在使用 Titanium API 使用 base64 编码技术对图像进行编码。

//Client-Side JavaScript Code
var selectedImageB64 = Ti.Utils.base64encode(selectedImage).toString();

Ti.Utils.base64encode API

现在我将这个字符串发送到服务器并在那里解码它,

//Server-Side Java Code
 byte[] photoData = Base64.decode(selectedImageB64);
 byte[] content = photoData;

Base64 API

现在将解码的数据(内容)传递给适当的方法以将图像保存到数据库中。直到这里一切都运行良好。图像已成功存储在数据库中。原始图像和存储在数据库中的图像大小相等,所以我认为这个编码和解码过程是成功的。但是,当我尝试在数据库中打开图像时,图像查看器会显示一条错误消息,提示“ Windows 照片查看器无法打开此图片,因为照片查看器不支持此文件格式,或者您没有最新的照片查看器的更新。 ”。所以我现在必须做的。究竟是什么问题?

问候..

4

4 回答 4

1

有几件事要检查:

1)将字节从服务器保存到文件系统,而不是仅仅为了消除一个变量(即数据库)

2)实际上在服务器端打印出前10个字节的数值,并在客户端做同样的事情。这是为了确保正确实现 base64 编码/解码功能(或者它们遵循相同的标准)。

3)我认为您不需要在base64encode之后使用toString,您可能需要在toString之前和之后的对象上的Ti.Api.Info

4)我想更多地了解 selectedImage 对象是什么,如果它是钛中的 blob 对象,它可能不是直接的图像,而是图像的包装器(所以你可能编码错误的数据)。

于 2014-05-05T13:32:01.997 回答
1

请尝试以下代码:

var selectedImage=image.getImage();
var selectedImageB64=Ti.Utils.base64encode(selectedImage).getText()

为我工作。

于 2014-05-05T15:38:14.393 回答
1

对于移动端:

var base64String = Ti.Utils.base64encode(imageView.toImage()).getText()

将 base64String 发送到服务器。

对于服务器端:

String tempPic = (String)jsonMap.get("base64String");
byte pic[] = Base64.decodeBase64(tempPic.getBytes());

现在,玩 pic[] 字节数组。这段代码对我有用。

于 2015-02-18T09:41:49.450 回答
0

我找到了解决方案,实际上,当从客户端发送 base64 编码数据时,编码数据中的“+”符号被空格替换。所以我尝试在服务器端用“+”号替换空间。这解决了这个问题。

于 2014-09-26T07:02:25.647 回答