としてエンコードされたインターネット経由で新しいファイルを送信することを目的とした ASP.Net Web API がありますBase64
。そのために、REST サービスを公開しています。
string imei = ControllerContext.Request.Headers.GetValues("IMEI").FirstOrDefault();
byte[] FileAsBytes = null;
String base64 = null;
var svcs = new CrudService.CrudServiceClient();
if (svcs.IsDeviceAccepted(imei))
{
FileAsBytes = svcs.DownloadSoftwareVersion();
}
if(FileAsBytes != null)
{
base64 = Convert.ToBase64String(FileAsBytes);
}
return base64;
プライベート サービスである CRUD サービスは、データベースおよびコア レイヤーと直接通信します。
デバッグを行った後、このサービスが のような正しい長さを返すことがわかりました。これは4194304 bytes
、ファイルのサイズに対応しているようです。ただし、クライアント側では、次の内部でこのサービスに連絡していますAsyncTask
:
@Override
protected String doInBackground(String... params) {
Log.i("UpdateManager: ", "Inside doInBackground");
try {
String imei = params[0];
String urlString = "http://10.118.18.50/Mobile.RESTPublicService/api/SoftwareUpdate";
HttpPost post = new HttpPost(urlString);
post.addHeader("IMEI", imei);
response = httpClient.execute(post);
Log.w("Update-Response: ",
Integer.toString(response.getStatusLine().getStatusCode())
+ " " + response.getStatusLine());
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
is = response.getEntity().getContent();
IOUtils.copy(is, writer, "UTF-8");
_log.debug(writer.toString());
Log.w("CONTENT: ", writer.toString());
byte[] result = new byte[MAX_FILE_SIZE]; //7242880 b
result = decodeBase64(writer.toString());
Log.w("BYTE ARRAY LENGTH: ", Integer.toString(result.length));
}
} catch (ClientProtocolException e) {
Log.e("Client: ", e.getMessage());
_log.error(e.getMessage());
return FAILED_DUE_TO_EXCEPTION;
} catch (IOException e) {
Log.e("IO: ", e.getMessage());
_log.error(e.getMessage());
return FAILED_DUE_TO_EXCEPTION;
}
return response.getStatusLine().toString();
}
ここで興味深い点はresult = decodeBase64(writer.toString());
、decodeBase64 メソッドです。
protected byte[] decodeBase64(String s) {
return Base64.decode(s);
}
Strings
は、Web サービスから取得したものです。
UEsDBBQACAgIAJteK0IAAAAAAAAAAAAAAAAZAAQAcmVzL2FuaW0vYWN0aXZpdHlmYWRlLnhtbP7KAABdkN9OwjAchc+PbW4YErnwgkRuuSGEek1MDI/SsMkmbF26es8D+AA+hs+hD6Wn0GXKab60/fq/ETK8CyCY4xNgL4TuCUPuyANZkEeyIXvySiaTqnGFbc1RO2MxHr9YU2+PbamRps5cWlmWv1ntKtNQ6ia3psqxXJbOtRul
これはファイル全体ではありませんが、これがbase64 encoded
この文字列がメソッドに渡されると、次のdecodeBase64
エラー メッセージのみが表示されます。
その後、アプリケーションは終了します。Base64
これは文字列を処理する方法ですか?この文字列からファイルを作成する方法を誰かが提案できますbase64
か? 最初に考えたのは、それをbyte
配列に変換してからファイルを作成することでした。