多选本地相册中的图片并展示(仿QQ空间动态发送页面)上传至服务器
2017-04-12 16:38
267 查看
最近公司项目需要从本地上传图片到服务器,直接去找才发现安卓居然还有这么坑的时候,调用原生的只能选择一张图片,而且还没有任何的细节优化,触摸图片就直接返回了。这肯定不行啊!于是就在网上找啊找。。。找啊找。。。有很多都写得花里胡哨的看不懂,而且界面的UI也是low的不行。。终于还是找到一个很好的demo,仿照QQ空间的样式。哎,这就很舒服。在此贴上来给自己一个提醒。
参照上一篇博客直接作为moudle导入使用才是真的美滋滋~~
http://www.cnblogs.com/linjzong/p/4629800.html
前段时间在做一个动态发布功能,需要用到图片上传。一开始直接调用的系统相册和相机,由于系统相机不支持多选,就花点时间做了个本地相册,在此开源下。
先上截图,依次为选择相册界面、相册详情界面、查看图片大图界面
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/fcff43d44d8d7d92ac926b6284766218.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/4fdcf6f29b5e733f1f1486dc44ddf1bd.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/8fcf6db98dea302d1e38fabe2cc81405.png)
相册列表按图片数量降序排序,相册详情列表按图片时间降序排序,对比了下微信和QQ的相册,读取的文件基本一致。
接下来说下相册文件遍历的思路。首先肯定不会是通过文件夹逐级遍历的,这样效率太低。查了下API发现Android的系统数据库已经存储了所有的图片路径和缩略图路径(如果有),可直接通过ContentProvider来获取,获取大图的URI是
获取缩略图的URI是
我的做法是先遍历所有大图,获取ID和路径,再通过大图的ID去查找缩略图路径,在相册中显示的都是缩略图,这样可以提高显示速度,同时减少内存开销。但是通过大图ID去查找缩略图这一步是需要消耗一点时间的,因此将它在App启动时,开启线程执行。LocalImageHelper类用以执行该操作。
待完善点:相册的初始化是放在应用启动时,初始化一次后就不再重新执行,因此假如在应用开启后,设备内添加了新的图片或删除了图片,应用内缓存的相册仍然不会改变,下一步可以在每次打开相册时和本地图片做一次对比,对新增的和删除的图片做一个更新。
Demo中使用了ImageLoader库来展示图片,使用的是Android Studio开发。
GitHub地址:https://github.com/LinJZong/LocalAlbum.git
demo中onActivityResult方法里:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/376d9a60ba557ff3a331713f61f0f960)
pathList就是我定义的一个集合用来存读到的原图的物理地址,因为展示的时候是缩略图但是你给服务器发送的话肯定要传大图,两个log的打印如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/f61bc8a7688f1c05dbae69dcc007b305)
拿到地址之后写了个updateImage(String descript, List<String> list)方法
第一个参数是用来获取发送动态的EditText里的内容,第二个list就是pathList
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/c245e4c52127ae6cdd7c2579337ce6a2)
然后通过pathList去循环的创建新的图片File对象存到一个list里面去发给服务器
params.setMultipart(true);
这句话一定要有,因为xutils的原理还是去模仿了浏览器表单的样式去给服务器发送(目前我是这么理解的),所以不设置为true的话服务器是不能接受文件的哟~~
参照上一篇博客直接作为moudle导入使用才是真的美滋滋~~
http://www.cnblogs.com/linjzong/p/4629800.html
前段时间在做一个动态发布功能,需要用到图片上传。一开始直接调用的系统相册和相机,由于系统相机不支持多选,就花点时间做了个本地相册,在此开源下。
先上截图,依次为选择相册界面、相册详情界面、查看图片大图界面
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/fcff43d44d8d7d92ac926b6284766218.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/4fdcf6f29b5e733f1f1486dc44ddf1bd.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/8fcf6db98dea302d1e38fabe2cc81405.png)
相册列表按图片数量降序排序,相册详情列表按图片时间降序排序,对比了下微信和QQ的相册,读取的文件基本一致。
接下来说下相册文件遍历的思路。首先肯定不会是通过文件夹逐级遍历的,这样效率太低。查了下API发现Android的系统数据库已经存储了所有的图片路径和缩略图路径(如果有),可直接通过ContentProvider来获取,获取大图的URI是
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
获取缩略图的URI是
MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI
我的做法是先遍历所有大图,获取ID和路径,再通过大图的ID去查找缩略图路径,在相册中显示的都是缩略图,这样可以提高显示速度,同时减少内存开销。但是通过大图ID去查找缩略图这一步是需要消耗一点时间的,因此将它在App启动时,开启线程执行。LocalImageHelper类用以执行该操作。
待完善点:相册的初始化是放在应用启动时,初始化一次后就不再重新执行,因此假如在应用开启后,设备内添加了新的图片或删除了图片,应用内缓存的相册仍然不会改变,下一步可以在每次打开相册时和本地图片做一次对比,对新增的和删除的图片做一个更新。
Demo中使用了ImageLoader库来展示图片,使用的是Android Studio开发。
GitHub地址:https://github.com/LinJZong/LocalAlbum.git
demo中onActivityResult方法里:
pathList就是我定义的一个集合用来存读到的原图的物理地址,因为展示的时候是缩略图但是你给服务器发送的话肯定要传大图,两个log的打印如下:
拿到地址之后写了个updateImage(String descript, List<String> list)方法
第一个参数是用来获取发送动态的EditText里的内容,第二个list就是pathList
然后通过pathList去循环的创建新的图片File对象存到一个list里面去发给服务器
params.setMultipart(true);
这句话一定要有,因为xutils的原理还是去模仿了浏览器表单的样式去给服务器发送(目前我是这么理解的),所以不设置为true的话服务器是不能接受文件的哟~~
相关文章推荐
- 2017/2/17本地上传图片展示(未向后台发送)
- Android开发:仿微信和QQ空间发说说相册读取、拍照、图片裁剪和图片上传服务器等功能的实现
- Android:读取本地相册与相机获取图片上传到服务器(用字符串的形式上传)
- # iOS 相册图片多选以及类似微信获取相册图片并使用AFN框架上传至服务器
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- (二)上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)
- 将本地图片或者网上图片用post方式上传到图片服务器
- 服务器认证发送邮件 上传图片并生成略缩图
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- 从UIWebView中调用iOS相册,并选择图片上传到Linux Web服务器。
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- [PHP] 本地服务器正常,FTP上传到服务器后页面出现乱码
- [java] 本地服务器正常,FTP上修改后在上传到服务器后页面出现乱码
- 【iphone开发】ios 从摄像头/相册获取图片,压缩图片,上传服务器小结
- (一)上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)
- c# asp.net 使用kindeditor在服务器上不能显示上传图片的页面等解决办法
- android从本地媒体库获取图片上传至服务器保存
- express(jade或ejs)如何实现上传图片到服务器并在客户端展示(在客户端可以删除)