9 5

android上传文件的同时并传递参数(附源码下载)

教你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以下的文件。没写其他的验证,不要把我的服务器搞挂就行了。。。

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

 

package zzp.t.uploadfile;

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();
}

}

源码包下载TestUploadFile