android 打开系统相册得到路径 上传图片到php服务器
来源:互联网 发布:淘宝店铺名字英文名字 编辑:程序博客网 时间:2024/06/05 02:20
最近在弄一个需要上传图片到服务器的项目(PHP -- warmserver),一些细节烦扰了我好久,终于解决了,所以也分享给大家。
读取相册需要一个读取sd卡的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span>
首先是相册图片的获取:
private final String IMAGE_TYPE = "image/*";
//这里的IMAGE_CODE是自己任意定义的,主要用于标示你的activity的常量
private final int IMAGE_CODE = 0;
打开系统相册:
<span style="white-space:pre"></span>Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT);getAlbum.setType(IMAGE_TYPE);<span style="white-space:pre"></span>startActivityForResult(getAlbum, IMAGE_CODE);
//使用intent调用系统提供的相册功能,使用startActivityForResult是为了获取用户选择的图片
重写onActivityResult() : 刚方法里面的代码如下,
<span style="white-space:pre"></span>if (resultCode != RESULT_OK) { // 此处的 RESULT_OK 是系统自定义得一个常量Log.e("TAG", "ActivityResult resultCode error");return;}Bitmap bm = null;//定义一个空的Bitmap// 外界的程序访问ContentProvider所提供数据 可以通过ContentResolver接口ContentResolver resolver = getContentResolver();// 此处的用于判断接收的Activity是不是你想要的那个if (requestCode == IMAGE_CODE) {try {Uri originalUri = data.getData(); // 获得图片的uribm = MediaStore.Images.Media.getBitmap(resolver, originalUri); // 显得到bitmap图片// 这里开始的第二部分,获取图片的路径:String[] proj = { MediaStore.Images.Media.DATA };// 好像是android多媒体数据库的封装接口,具体的看Android文档Cursor cursor = managedQuery(originalUri, proj, null, null,null);// 按我个人理解 这个是获得用户选择的图片的索引值int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);// 将光标移至开头 ,这个很重要,不小心很容易引起越界cursor.moveToFirst();// 最后根据索引值获取图片路径String path = cursor.getString(column_index);textView1.setText(path);//这里返回的路径我用一个textview输出显示在界面} catch (IOException e) {Log.e("Tag", e.toString());}}
获取到了图片的路径,下面就开始上传了,这里上传我用的是github上的开源框架(xUtils),可以去www.github.com 上搜索 xUtils ,看到人气高的就对了。直接给个下载地址 https://github.com/wyouflf/xUtils 下载完后把它拷到项目下就好了,有不懂的,里面还有说明书,中文的很简单。
下面就上传了,我刚才用一个textview显示了路径,直接拿textviewi里的文本就好了。你们也可以保存为一个变量也行。
这里我实现一个按钮点击事件直接上传
<span style="white-space:pre"></span>public static final String requestURL="http://119.29.170.185:8080/uploadImage/index.php";//上传服务器的url
<span style="white-space:pre"></span>public void upload(View view) { RequestParams params = new RequestParams(); //判断textview是否为空,是否选择了图片。 if (TextUtils.isEmpty(textView1.getText().toString().trim())) { Toast.makeText(getApplicationContext(), "没选择图片", 0).show();return;}//file为服务器接受要对应 params.addBodyParameter("file",new File(textView1.getText().toString().trim())); HttpUtils http = new HttpUtils();//下面就直接调用框架的上传功能了,不需理解框架是怎么写的 http.send(HttpRequest.HttpMethod.POST, requestURL, params, new RequestCallBack<String>() {//回调方法,成功和失败 @Override public void onSuccess(ResponseInfo<String> responseInfo) { Toast.makeText(getApplicationContext(), "上传成功", 0).show(); } @Override public void onFailure(HttpException error, String msg) { Toast.makeText(getApplicationContext(), "上传失败"+error.toString(), 0).show(); } });}
以上就是Android客户端的代码了,下面就是一个简单的php服务器的代码,很简单。
<?php //获取文件后缀名函数(如:index.jpg 获取到的就是jpg) function fileext($filename) { return substr(strrchr($filename, '.'), 1); } //生成随机文件名函数 function random($length)//length表示生成几个字符 { $hash = 'image-'; // $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; $chars = '0123456789abcdefghijklmnopqrstuvwxyz'; $max = strlen($chars) - 1; mt_srand((double)microtime() * 1000000); for($i = 0; $i < $length; $i++) { $hash .= $chars[mt_rand(0, $max)]; } return $hash; } if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br />"; } else { /*echo "Upload: " . $_FILES["file"]["name"] . "<br />"; //获取上传文件的名字echo "Type: " . $_FILES["file"]["type"] . "<br />"; //类型echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; //大小echo "Stored in: " . $_FILES["file"]["tmp_name"];//临时文件路径 */ $uploaddir = './'.random(3).'.'.fileext($_FILES["file"]["name"]).'/';//设置文件保存目录 注意包含/if(move_uploaded_file($_FILES['file']['tmp_name'],$uploaddir)) //这个函数就是就图片从临时文件夹移动到自己的路径下面了{ echo "<center>您的文件已经上传完毕 上传图片预览: </center><br><center>123</center>"; }else { echo"传输失败!"; }} ?>
一个简单的文件上传就这样完成了。。。不懂没关系,重要的去寻找解决问题中的所获所得。
1 0
- android 打开系统相册得到路径 上传图片到php服务器
- android 打开系统相册得到路径 上传图片到php服务器
- android 上传图片到php服务器
- android使用PHP上传图片到服务器
- Android 上传图片到服务器(PHP)
- android将图片上传到php服务器
- 上传图片并保存到服务器上之后,如何得到该图片服务器路径(http://~)
- 调用系统相册上传头像到服务器
- iOS 相机调用相册打开及图片头像的上传到服务器详解
- Android调取系统相册和相机照片设置到ImageView并上传到服务器
- 【系统相册】Android 保存图片到系统相册
- android 上传图片到web服务器,php负责接收
- Android 上传图片到服务器(PHP) 接受
- Android图片异步上传到PHP服务器实例
- Android 保存图片到系统相册
- Android保存图片到系统相册
- Android保存图片到系统相册
- android 调用系统相册并得到图片地址
- 细谈Hibernate之悲观锁和乐观锁解决hibernate并发
- 怎么使用CorelDRAW旋转和位移字符
- MySQL创建多表查询的存储过程的两种方法
- android知识库
- Elasticsearch集成ik分词器
- android 打开系统相册得到路径 上传图片到php服务器
- 关于mysql安装的个人整理
- div ul li自动适应高度float:left
- Intersection of Two Arrays II
- XCode 7.3.1(dmg) 官方直接下载地址(离线下载)
- Android push 原理 分析
- iOS 模拟器安装.app
- 剑指offer-面试题8:旋转数组中的最小数字
- Hbuilder开发移动新闻客户端(二)