【发布时间】:2013-02-01 08:24:45
【问题描述】:
trying to send an XML 文件从我的客户端应用程序(在 Android 上)传输到服务器端(IIS 7)之后。我没有得到 XML 文件的文件名,而只是得到了内容。
现在我意识到,简单地传输纯 XML 文件会非常繁重(当我将几乎所有应用程序的数据同步到服务器之后)。
- 现在我正在寻求从我的客户端应用程序向服务器端发送一个压缩文件。
- XML 文件被完美地压缩到原来大小的一半以下。正在使用HTTP POST 方法发送文件,直接使用FileEntity 而不使用MultiPart(这可能是个问题)。
更新 2: 添加了我自己的答案(效果更好:D)。
更新:添加了客户端代码。
问题:
- zip 文件被保存在服务器端,但是当我打开它时,winrar/7zip 给了我一个错误,提示 unexpected end of archive.。
我提到了 nearly similar problem,但我在 .NET 上处于劣势在C# 中也进行了开发:(所以不能真正使用确切的代码(丢失、未初始化的变量等)。此外,线程已经有 4 年历史了,我非常不希望有人会回应在那里。
我现有的服务器端代码:
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);
//...
我该如何解决这个问题? :(
【问题讨论】:
-
服务器的操作系统是什么?我在win2k3服务器上有类似的问题。通常编码访问仍然有效。尝试将文件发送到你的 win7 或任何电脑(从服务器),看看它是否仍然损坏。
-
@efkah ..在几分钟内发布答案:D
标签: c# java android asp.net http