6

デバイスの専用パスからファイルを選択してサーバーに送信するアプリケーションがあります。

ksoap2 lib を使用して .NET Web サービスを呼び出し、ファイルをサーバーに送信しています。Base 64 エンコーディングを使用しています。

暗号化なしで 1MB、暗号化ありで 850Kb の最大サイズのファイルを送信できます。私が使用している暗号化アルゴリズムは 3DES です。

上記のサイズより大きいファイルを送信しようとすると、次のエラーが発生します。

私のテスト環境: API レベル 8 の Android エミュレーター、Android 2.2、および SDCard メモリ 512 MB

私が何かを見逃しているということですか?このシナリオで BLOB を使用すると役立ちますか

より大きなファイルを送信する方法はありますか? データ チャンクの送信について聞いたことがありますが、それについてはわかりません。リンクやサンプルコードは本当に役に立ちます。

次のコードを使用してファイル データを取得するには: here url = ファイルが保存されている場所

public byte[] getFileData( String vURL){ instream = new FileInputStream(vURL); size = (int) vURL.length();
fileContent = new byte[size]; instream.read(fileContent); }

次のコードを使用してデータをエンコードします。

byte[] res = Utilities.getFileData(file);
String mdata = android.util.Base64.encodeToString(res,                                android.util.Base64.DEFAULT);

サーバー側の Web サービスの呼び出しとサーバーへのデータの送信

SoapObject request = new SoapObject(nameSpace, methodName);

if (fileData != null && !fileData.equals("")) {
      request.addProperty("vBLOBData", fileData);
}
   SoapSerializationEnvelope envelope = getEnvelope(request);
   HttpTransportSE ht = new HttpTransportSE(url); // ,3000
   ht.debug = true;
   ht.call(soapAction, envelope);
  response = (envelope.getResponse()).toString();

1 MB を超えるファイルデータを送信できません。

前もって感謝します

4

4 に答える 4

0

GZip Zipping アルゴリズムを使用して、モバイル側から大きなファイルを圧縮します。サーバーからの同じ解凍を使用します。

また、MultipartEntity を使用すると、大きなファイル コンテンツをアップロードするのに役立ちます。

于 2013-04-08T13:17:43.047 に答える
0

送信する前にバッファを 1024 に設定してみてください。バッファ サイズと RAM の制限についてです。

于 2013-04-06T02:59:46.217 に答える
0
于 2013-04-09T13:14:02.013 に答える