我正在使用Titanium Appcelerator开发跨平台移动应用。此应用基于Sakai,在此应用中,我必须将图像发送到服务器。
客户端我使用Titanium API使用base64编码技术对图像进行编码。
//Client-Side JavaScript Code
var selectedImageB64 = Ti.Utils.base64encode(selectedImage).toString();
现在我将此字符串发送到服务器并在那里解码它,
//Server-Side Java Code
byte[] photoData = Base64.decode(selectedImageB64);
byte[] content = photoData;
现在将解码数据(内容)传递给适当的方法以将图像保存到数据库中。直到这里一切都运转良好。图像已成功存储在数据库中。原始图像的大小和存储在数据库中的图像是相同的,因此我认为这种编码和解码过程是成功完成的。但是当我尝试在数据库中打开图像时,图像查看器会显示一条错误消息,说明" Windows照片查看器无法打开此图片,因为照片查看器不支持此文件格式,或者您没有最新的更新 到照片查看器。"。所以我现在必须做的。究竟是什么问题?
此致..
答案 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编码数据时,正在用空格替换。所以我尝试用服务器端的“+”符号替换空格。这解决了这个问题。