客户端与服务器端的交互——上传文件
其实嘛,这篇文章比较水,没有啥技术含量,主要是用来熟练开源框架的。
PS:不过思路我先讲一下
页面是一个Edittext 和一个button 前者是你放入文件的路径的
至于button 要加入一个点击事件,首先 你要判断文件是否存在
不存在就要提醒 文件路径错误 ,存在就要用开源框架上传数据(开启子线程进行联网,将文件上传,然后服务器会返回一个结果,我就提醒用户上传成功!)
Demo 就一个主类 我先给大家看看代码 我在后面进行解析
import java.io.File; import java.io.FileNotFoundException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpConnectionManager; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.multipart.FilePart; import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity; import org.apache.commons.httpclient.methods.multipart.Part; import org.apache.http.Header; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.RequestParams; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText et_path; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.et_path = (EditText) this.findViewById(R.id.et_path); } public void uploadByHttpClient(View view) { String path = this.et_path.getText().toString().trim(); final String url = "http://110.65.99.66:8080/androidserver/UploadFileServlet"; final File file = new File(path); // 先判断文件是否存在 if (file.exists() && file.length() > 0) { // 网络访问为耗时操作,应该放在子线程中执行 new Thread() { public void run() { // 1. 创建第三方HttpClient对象 HttpClient client = new HttpClient(); // 2. 创建POST请求对象 PostMethod post = new PostMethod(url); // 3. 设置请求体内容 try { // 参数体 Part[] ps = { new FilePart("file", file) }; post.setRequestEntity(new MultipartRequestEntity(ps, post.getParams())); // 4. 获取连接器管理对象 HttpConnectionManager manager = client .getHttpConnectionManager(); // 5. 设置参数提交的等待时间 manager.getParams().setConnectionTimeout(10000); // 6. 执行PostMethod方法 client.executeMethod(post); // 7. 程序执行到这里,说明成功 runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "上传成功", 0) .show(); } }); } catch (Exception e) { e.printStackTrace(); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "上传失败", 0) .show(); } }); } }; }.start(); } else { Toast.makeText(this, "文件不存在!", 0).show(); } } public void uploadByAsyncHttpClient(View view) { String path = this.et_path.getText().toString().trim(); final String url = "http://110.65.99.66:8080/androidserver/UploadFileServlet"; final File file = new File(path); // 先判断文件是否存在 if (file.exists() && file.length() > 0) { // 1. 创建AsyncHttpClient对象 AsyncHttpClient client = new AsyncHttpClient(); // 2.设置参数体 RequestParams params = new RequestParams(); try { // 其实这里的异常不可能出现,因为上边已经做了判断 params.put("profile_picture", file); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 3.上传文件 client.post(url, params, new AsyncHttpResponseHandler() { // 上传成功时回调的方法 @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { Toast.makeText(MainActivity.this, "上传成功!", 0).show(); } // 上传失败时回调的方法 @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { Toast.makeText(MainActivity.this, "上传失败!错误码:" + statusCode, 0).show(); } }); } else { Toast.makeText(this, "文件不存在!", 0).show(); } } }
首先或许Edittext输入的内容 准备好一个URL 然后判断文件是否存在 然后就用工具.......文章中还用 自己写的上传的进行对比 使用工具比较简单