教你android平台如何上传文件并传递参数。

android的sdk中自带了apache的httpclient库,但是精简过的,只具有部分功能,所以有些功能的支持还是需要自己另外导入httpclient库的

先介绍下用到的主要类

httpclient,它把请求发到服务器,并接收服务器返回的结果

httppost,向服务器的请求,内容都放在这里面

multiPartEntity,multiPart实体,这里面装的有参数和文件

StringBody,装参数的

Filebody,装文件的

httpResponse,服务器的返回

 

OK,开始吧

首先创建HttpPost对象

HttpPost post=new HttpPost("http://veikr.com/myupload/upload.php");

创建File

File file=new File("/mnt/sdcard/info.txt");

创建multiPart实体

MultiPartEntity entity=new MultiPartEntity();

把参数和文件都装进去

entity.addPart("name",new StringBody("veikr.com"));

entity.addPart("file",new FileBody(file));

然后发送请求

HttpClient client=new DefaultHttpclient();

HttpResponse response=client.execute(post);

请求完成,就可以得到返回的结果了

response.getStatusLine().getStatusCode()

response.getEntity().getInputStream();

这里有个实用的方法

EntityUtils.toString(response.getEntity());可以直接把返回的结果转换为字符串

 

OK,完工,很简单的。

大家可以自己装个xampp用php写个服务端,上传文件很好写,几句话就够了,可以到http://www.w3school.com.cn/ 看看教程

或者也可以直接用我写好的

地址是:http://veikr.com/myupload/upload.php

另附上php端的代码

参数:name

文件:file

只能上传512K以下的文件。没写其他的验证,不要把我的服务器搞挂就行了。。。

下面粘上全部代码,源码包下面有下载。

 


import java.io.File;
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		final ProgressDialog dlg = new ProgressDialog(this);
		dlg.setMessage("上传中...");
		dlg.show();
		new AsyncTask<Void, Void, HttpResponse>() {
			@Override
			protected HttpResponse doInBackground(Void... params) {
				try {
					HttpPost post = new HttpPost(
							"http://veikr.com/myupload/upload.php");
					File file = new File("/mnt/sdcard/infor.txt");
					MultipartEntity multipart = new MultipartEntity();
					multipart.addPart("name", new StringBody("veikr.com"));
					multipart.addPart("file", new FileBody(file));
					HttpClient client = new DefaultHttpClient();
					post.setEntity(multipart);
					HttpResponse response = client.execute(post);
					return response;
				} catch (Exception e) {
					e.printStackTrace();
					return null;
				}
			}

			@Override
			protected void onPostExecute(HttpResponse result) {
				dlg.dismiss();
				if (result != null) {
					try {
						new AlertDialog.Builder(MainActivity.this)
								.setMessage(
										EntityUtils.toString(result.getEntity()))
								.create().show();
					} catch (ParseException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				} else {
					Toast.makeText(MainActivity.this, "异常啊异常。。。", 0).show();
				}
			}
		}.execute();
	}
}```
<a href="http://veikr.com/assets/wp-content/uploads/2011/09/TestUploadFile.zip">源码包下载TestUploadFile</a>