クライアント側アプリ (Android) からサーバー側 (IIS 7) にXML ファイルを送信しようとした後。XML ファイルのファイル名は取得できませんでしたが、内容だけは問題ありませんでした。
ここで、生の XML ファイルを転送するだけでは負荷がかかりすぎることに気付きました (ほぼすべてのアプリ データをサーバーに同期させた後)。
- 現在、クライアント アプリからサーバー側に圧縮ファイルを送信しようとしています。
- XML ファイルは完全に圧縮され、元のサイズの半分以下にサイズが縮小されます。ファイルは、HTTP POST
直接使用する方法と使用FileEntity
しないMultiPart
方法を使用して送信されています(問題になる可能性があります)。
更新 2:自分の回答を追加しました (うまくいきます:D)。
アップデート:クライアント側のコードを追加。
問題:
- zip ファイルはサーバー側に保存されますが、それを開くと、winrar/7zip で というエラーが表示されましたunexpected end of archive.
。私はほぼ同様
の問題に言及しましたが、私は開発に関しても下手です:(したがって、正確なコードを実際に利用することはできませんでした(欠落、初期化されていない変数など)。また、スレッドは4年ほどです古くて、誰かがそこに反応することを本当に望んでいません。.NET
C#
私の既存のサーバー側コード:
string fileName = "D:\\newZIPfile.zip";
Stream myStream = Request.InputStream;
byte[] message = new byte[myStream.Length];
myStream.Read(message, 0, (int)myStream.Length);
string data = System.Text.Encoding.UTF8.GetString(message);
using (FileStream fs = new FileStream(fileName, FileMode.Create))
{
using (StreamWriter writer = new StreamWriter(fs, System.Text.Encoding.UTF8))
{
writer.Write(data);
}
}
私のクライアント側のコード:
File file2send = new File(newzipfile);
String urlString = "http://192.168.1.189/prodataupload/Default.aspx"; // FOR TEST
HttpParams httpParams = new BasicHttpParams();
int some_reasonable_timeout = (int) (30 * DateUtils.SECOND_IN_MILLIS);
HttpConnectionParams.setConnectionTimeout(httpParams, some_reasonable_timeout);
HttpClient client = new DefaultHttpClient(httpParams);
HttpPost post = new HttpPost(urlString);
//System.out.println("SYNC'ing USING METHOD: " + post.getMethod().toString());
try {
//OLD FILE-ENTITY MECHANISM >
FileEntity fEntity = new FileEntity(file2send, "application/zip");
//NEW (v1.5) INPUTSTREAM-ENTITY MECHANISM >
//InputStreamEntity fEntity = new InputStreamEntity(new FileInputStream(newzipfile), -1);
// fEntity.setContentType("application/zip");
post.setEntity(fEntity);
HttpResponse response = client.execute(post);
resEntity = response.getEntity();
res_code = response.getStatusLine().getStatusCode();
final String response_str = EntityUtils.toString(resEntity);
if (resEntity != null) {
Log.i("RESPONSE",response_str);
//...
この問題を解決するにはどうすればよいですか? :(