前两个月有幸参加一次免费培训,开发了一款小软件。发现AsyncHttpClient还真是好用。
直奔主题,安卓上传文件至PHP服务器:
1.PHP端服务器:
<?php
//链接数据库
include ("config/db.php");
//获取用户id
$userid = $_POST['userid'];
//处理上传文件
$base_path = "upload/";
$fileName=$_FILES['file']['name'];
$name=explode('.',$fileName);
$userpicads = $base_path . 'user_'.$userid. '.' .$name[1];
/*
返回状态码:
300: 处理成功
301:服务器异常
*/
$status=301;
if (move_uploaded_file ( $_FILES ['file'] ['tmp_name'], $userpicads )) {
$status=300;
} else {
$status=301;
}
//如果保存文件成功,更新数据库
if($status==300)
{
$sql = "update mh_user set userpicads='{$userpicads}' where id={$userid}";
$pdo->exec($sql);
}
//输出返回结果
$ret = array('status'=> $status);
echo json_encode($ret);
?>
2.安卓端添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
3.安卓端导入以下jar包(这些很容易就能下载到):
android-async-http-1.4.7.jar (必须)
gson-2.1.jar (可选,解析json格式用)
httpcore-4.4.4.jar(可选,用Android Stutio可能还需要导入这个)
4.安卓主要代码:
int userid = 1;
String username = "HelloWorld";
String filepath = "/mnt/sdcard/Download/mm.jpg";
String uploadUrl = "http://192.168.1.103/test/upload.php";
btn_upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
//添加参数
params.put("userid", userid);
params.put("username", username);
try {
//添加文件
params.put("file", new File(filepath));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
client.post(uploadUrl, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int i, org.apache.http.Header[] headers, byte[] bytes) {
try {
//获取返回内容
String resp = new String(bytes, "utf-8");
//在这里处理返回的内容,例如解析json什么的...
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int i, org.apache.http.Header[] headers, byte[] bytes, Throwable throwable) {
//在这里处理连接失败的处理...
}
});
}
});
本文主要参考:
http://blog.csdn.net/fancylovejava/article/details/13506745
PHP如何重命名上传的文件:
Android Studio 可能找不到 org.apache.http.Header,参考: