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

デコードされたデータ (コンテンツ) が適切なメソッドに渡され、画像がデータベースに保存されます。ここまではすべてうまくいっています。画像はデータベースに正常に保存されました。元の画像とデータベースに保存されている画像のサイズは同じなので、このエンコードとデコードのプロセスは成功したと思います。しかし、データベース内の画像を開こうとすると、画像ビューアーに次のようなエラー メッセージが表示されます。フォト ビューアーを更新します。 ". だから私が今しなければならないこと。問題は正確には何ですか?

よろしく..

4

4 に答える 4

1

いくつかの確認事項:

1)変数(つまり、db)を削除するためだけに、代わりにサーバーからファイルシステムにバイトを保存します

2)サーバー側で最初の10バイトの数値を実際に出力し、クライアント側で同じことを行います。これは、base64 エンコード/デコード機能が正しく実装されている (または同じ標準に従っている) ことを確認するためです。

3) base64encode の後に toString を使用する必要はないと思います。オブジェクトの Ti.Api.Info を toString の前後に使用する可能性があります。

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 に答える
0

実際、エンコードされたデータの「+」記号がスペースに置き換えられているクライアントからbase64でエンコードされたデータを送信するときに、これに対する解決策を見つけました。そこで、サーバー側でスペースを「+」記号に置き換えてみました。それはこの問題を解決します。

于 2014-09-26T07:02:25.647 に答える