服务器端base64解码后无法打开图像

时间:2014-05-02 20:41:46

标签: image client-server titanium base64 sakai

我正在使用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 个答案:

答案 0 :(得分:1)

要检查几件事:

1)将字节从服务器保存到文件系统,而不是消除变量(即db)

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

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

4)我想了解更多关于selectedImage对象的内容,如果它是钛中的blob对象,它可能不是直接的图像,而是图像周围的包装(所以你可能编码错误的数据)。 / p>

答案 1 :(得分:1)

请尝试以下代码:

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

适合我。

答案 2 :(得分:1)

对于移动端:

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

将base64String发送到服务器。

对于服务器端:

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

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

答案 3 :(得分:0)

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