客户端与服务器端的交互——上传文件

时间:2022-08-29 12:06:03

其实嘛,这篇文章比较水,没有啥技术含量,主要是用来熟练开源框架的。

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 然后判断文件是否存在 然后就用工具.......文章中还用 自己写的上传的进行对比 使用工具比较简单