android 打开系统相册得到路径 上传图片到php服务器
来源:互联网 发布:如何在淘宝里开网店 编辑:程序博客网 时间:2024/06/04 19:34
版权声明:本文为博主原创文章,未经博主允许不得转载。
最近在弄一个需要上传图片到服务器的项目(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(); // 获得图片的uri
- bm = 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"传输失败!";
- }
- }
- ?>
一个简单的文件上传就这样完成了。。。不懂没关系,重要的去寻找解决问题中的所获所得。
0 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 调用系统相册并得到图片地址
- oracle中redo和undo的区别
- 超容易操作的git(一)
- 1.学习LINUX的第一步
- vue中component组件的props使用
- 尝鲜系列之手把手教你使用Ambari2.0.0
- android 打开系统相册得到路径 上传图片到php服务器
- ios:initWithString和initWithFormat的区别
- android-问题- Error running app
- 二分-网线主管
- Android异常之Service启动Activity
- iOS 只有下划线的输入框
- http://blog.sina.com.cn/ainideduyuxielan
- Activity的生命周期详解
- 2016 acm/icpc 大连站现场赛(7道题)