Android上传文件到服务器

转载请注明转自 : http://www.r-base.net/archives/360

  我们很多时要与服务器进行接的数据,上传xml文件,服务器进行读取再返回xml文件的方式非常普遍.就如我的其中一个应用<<足球即时比分>>,更新比分信息时,就上传xml(因为数据量比较大,直接用参数方式不太适合,所以选择以文件作为参数)再由服务器端返回xml文件,再然后读取xml文件进行比分数据的更新操作.

  以下的代码是<<足球即时比分>>应用的代码片段,代码只用到了Android自带的API,没有添加其它的jar包,以下代码只在需要上传文件时直接调用就可以了. 如果需要上传多个文件时,可以将多个文件进行压缩成一个文件再进行上传.(如何压缩文件或目录可以看我另一篇博文:[ Android压缩文件(压缩目录) ])

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.io.File;
import java.text.MessageFormat;
 
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.FileEntity;
import org.apache.http.impl.client.DefaultHttpClient;
 
import android.util.Log;
 
/**
 * 上传的url,f 为要上传的文件
 * @url 上传的目标url
 * @f 要上传的文件
 * @return 成功返回true,失败返回false
*/
public static boolean postFile(String url, File f) {
  if(url == null || f == null){
    return false;
  }
  HttpClient client = new DefaultHttpClient();
  HttpPost httpPost = new HttpPost(url);
  HttpResponse response = null;
  try {
    FileEntity entity = new FileEntity(f, "binary/octet-stream");
    httpPost.setEntity(entity);
    response = client.execute(httpPost);
  } catch (Exception e) {
  } finally {
  }
 
  // 判断上传的状态和打印调试信息
  if (response != null
    && response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    // 打印调试信息,上传的url和上传的文件大小
    Log.d("r-base.net",
       MessageFormat.format("upload xml success! url = [{0}],
       file size = [{1}]",url,f.length()));
    return true;
  }
  return false;
}

  以上的代码是Android手机端的,在服务器只需要得到Request的InputStream,再写入文件就可以得到上传的文件服务器的代码如下:

1
2
3
4
public String getFile(HttpServletRequest request){
  InputSteam in = request.getInputStream();
  org.apache.commons.io.IOUtils.copy(in,new OutputStream("c:/upload_file.file"));
}

相关推荐