一、添加权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.READ_FRAME_BUFFER"
tools:ignore="ProtectedPermissions" />
二、服务器php 程序
$target_path = "./test/";//接收文件目录
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded";
} else{
echo "There was an error uploading the file, please try again!" . $_FILES['uploadedfile']['error'];
}
三、Android java程序
private static final String CHARST ="UTF-8";
public boolean uploadFile(File file,String RequestURL,String imgname) {
String BOUNDARY =UUID.randomUUID().toString();// 边界标识 随机生成
String PREFIX ="--",LINE_END ="\r\n";
String CONTENT_TYPE ="multipart/form-data";// 内容类型
try {
URL url =new URL(RequestURL);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setReadTimeout(50000);
conn.setConnectTimeout(50000);
conn.setDoInput(true);// 允许输入流
conn.setDoOutput(true);// 允许输出流
conn.setUseCaches(false);// 不允许使用缓存
conn.setRequestMethod("POST");// 请求方式
conn.setRequestProperty("Charset",CHARST);
// 设置编码
conn.setRequestProperty("connection","keep-alive");
conn.setRequestProperty("Content-Type",CONTENT_TYPE +";boundary="
+BOUNDARY);
if (file !=null) {
/** * 当文件不为空,把文件包装并且上传 */
OutputStream outputSteam =conn.getOutputStream();
DataOutputStream dos =new DataOutputStream(outputSteam);
StringBuffer sb =new StringBuffer();
sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINE_END);
/**
* 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件
*/
sb.append("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\""
+imgname +".png" +"\"" +LINE_END);//file.getName()
sb.append("Content-Type: application/octet-stream; charset="
+CHARST +LINE_END);
sb.append(LINE_END);
dos.write(sb.toString().getBytes());
InputStream is =new FileInputStream(file);
byte[]bytes =new byte[1024];
int len =0;
// ImageView img = (ImageView) findViewById(R.id.imageView);
// Bitmap bitmap = BitmapFactory.decodeStream(is);
// img.setImageBitmap(bitmap);
while ((len =is.read(bytes)) != -1) {
dos.write(bytes,0, len);
}
is.close();
dos.write(LINE_END.getBytes());
byte[]end_data = (PREFIX +BOUNDARY +PREFIX +LINE_END).getBytes();
dos.write(end_data);
dos.flush();
dos.close();
/**
* 获取响应码 200=成功 当响应成功,获取响应的流
*/
int res =conn.getResponseCode();
Log.e("111","response code:" +res);
if (res ==200) {
return true;
}
}
}catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return false;
}
四、新建线程调用
new Thread() {
@Override
public void run() {
String fileName =Environment.getExternalStorageDirectory().getAbsolutePath() +"/facepass/001.png";
File filePic =new File(fileName);
// uploadFile(filePic, "http://10.100.72.152/uploadimg1.php");
// uploadFile(filePic, "http://10.100.72.152/uploadimg1.php");
uploadFile(filePic,"http://10.100.72.152/?c=preson&a=addimg","img");
}
}.start();
五、动态获取权限
if (Build.VERSION.SDK_INT >=23) {
int REQUEST_CODE_CONTACT =101;
String[]permissions = {
Manifest.permission.WRITE_EXTERNAL_STORAGE};
//验证是否许可权限
for (String str :permissions) {
if (MainActivity.this.checkSelfPermission(str) !=PackageManager.PERMISSION_GRANTED) {
//申请权限
MainActivity.this.requestPermissions(permissions,REQUEST_CODE_CONTACT);
return;
}else {
//这里就是权限打开之后自己要操作的逻辑
}
}
}
网友评论