安卓上传文件至PHP服务器

时间:2022-01-26 04:00:51

前两个月有幸参加一次免费培训,开发了一款小软件。发现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如何重命名上传的文件:

http://zhidao.baidu.com/link?url=lipsDeUjztDw-kwpcWcs7b16_GEer7T2r7wBM3MMzRpBCZuct-wikqv6j5vsZxK39KotlB8qH8bVXOqRCXHosq

 

Android Studio 可能找不到 org.apache.http.Header,参考:

http://zhidao.baidu.com/link?url=_RM6ndKff2FpUf6i-I97FiyKpnwPsHCg7EgYFXjTJgAhZlLN8DlT55VX02sD3epoEw72BWU2xbWqLN_yfHXBGw0nKxqbctMzSbo51UPePRi