Closed 38603678 closed 6 years ago
看错误信息是提示这个文件不存在,你可以查看一下手机是否有这个 路径/data/data/com.cq.wsj.ecare/cache/picture_cache/1508404062974.png,后面这个文件名是根据时间戳生成的不存在重复的情况
建议在media.getCompressPath()的时候判断一下media.isCompress()是否压缩过,没压缩过或压缩失败的图片可以取getPath原图
博主大大,首先很感谢你的回复!我在手机上没有找到该目录,但是有时候又可以成功上传,同是那9张照片,有时候9张都能成功,有时候6张才能成功,数量不固定,但是2张以下试过的基本每次都能成功。而且每次报错的都是随机的,不是同一张报错。我也加上了你说的判断是否压缩成功: if (media.isCompressed()){ file = new File(media.getCompressPath()); Log.e("IMG", media.getCompressPath()); }else { file = new File(media.getPath()); Log.e("IMG", media.getPath()); } 但是还是报错,而且报错的路径都是压缩路径:
10-23 10:39:37.790 28433-28433/com.cq.wsj.ecare E/IMG: /data/data/com.cq.wsj.ecare/cache/luban_disk_cache/Luban_1508726369703.jpg
10-23 10:39:37.790 28433-28433/com.cq.wsj.ecare E/IMG: /storage/emulated/0/ecare/1507775118818.jpg
10-23 10:39:37.790 28433-28433/com.cq.wsj.ecare E/IMG: /data/data/com.cq.wsj.ecare/cache/luban_disk_cache/Luban_1508726373943.jpg
10-23 10:39:37.795 28433-28433/com.cq.wsj.ecare E/IMG: /data/data/com.cq.wsj.ecare/cache/luban_disk_cache/Luban_1508726374085.jpg
10-23 10:39:37.795 28433-28433/com.cq.wsj.ecare E/IMG: /data/data/com.cq.wsj.ecare/cache/luban_disk_cache/Luban_1508726376499.jpg
10-23 10:39:37.795 28433-28433/com.cq.wsj.ecare E/IMG: /data/data/com.cq.wsj.ecare/cache/luban_disk_cache/Luban_1508726376744.jpg
10-23 10:39:37.795 28433-28433/com.cq.wsj.ecare E/IMG: /data/data/com.cq.wsj.ecare/cache/luban_disk_cache/Luban_1508726376897.jpg
10-23 10:39:37.800 28433-28433/com.cq.wsj.ecare E/IMG: /data/data/com.cq.wsj.ecare/cache/luban_disk_cache/Luban_1508726377143.jpg
10-23 10:39:37.800 28433-28433/com.cq.wsj.ecare E/IMG: /data/data/com.cq.wsj.ecare/cache/luban_disk_cache/Luban_1508726377548.jpg
10-23 10:39:37.800 28433-28433/com.cq.wsj.ecare E/IMG: before upload~~~~~~
10-23 10:39:38.170 28433-28433/com.cq.wsj.ecare E/IMG: error: /data/data/com.cq.wsj.ecare/cache/luban_disk_cache/Luban_1508726376744.jpg: open failed: ENOENT (No such file or directory)
有点想不明白了,问题出在哪里,是压缩环节出错了吗?但是根据判断media.getCompressPath()是压缩成功了呀,按道理是有那个文件的呀
会不会是我的设置出错了?系统压缩和鲁班压缩我都试过了,下面是我的配置: PictureSelector.create(this) .openGallery(PictureMimeType.ofImage())//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo() .maxSelectNum(9)// 最大图片选择数量 int .minSelectNum(1)// 最小选择数量 int .imageSpanCount(4)// 每行显示个数 int .selectionMode(PictureConfig.MULTIPLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE .previewImage(true)// 是否可预览图片 true or false .previewVideo(false)// 是否可预览视频 true or false .enablePreviewAudio(false) // 是否可播放音频 true or false .isCamera(true)// 是否显示拍照按钮 true or false .isZoomAnim(true)// 图片列表点击 缩放效果 默认true .sizeMultiplier(0.5f)// glide 加载图片大小 0~1之间 如设置 .glideOverride()无效 .setOutputCameraPath("/CustomPath")// 自定义拍照保存路径,可不填 .enableCrop(false)// 是否裁剪 true or false .compress(true)// 是否压缩 true or false .compressMode(PictureConfig.LUBAN_COMPRESS_MODE)//系统自带 or 鲁班压缩 PictureConfig.SYSTEM_COMPRESS_MODE or LUBAN_COMPRESS_MODE .compressGrade(Luban.THIRD_GEAR)// luban压缩档次,默认3档 Luban.THIRD_GEAR、Luban.FIRST_GEAR、Luban.CUSTOM_GEAR .glideOverride(100, 120)// int glide 加载宽高,越小图片列表越流畅,但会影响列表图片浏览的清晰度 .isGif(false)// 是否显示gif图片 true or false .openClickSound(false)// 是否开启点击声音 true or false .previewEggs(true)// 预览图片时 是否增强左右滑动图片体验(图片滑动一半即可看到上一张是否选中) true or false .forResult(PictureConfig.CHOOSE_REQUEST);//结果回调onActivityResult code
看代码是没什么问题,你自己看下demo有没有这个问题吧?或者找下规律
获取到List
你可以压缩上传完后 调用清除缓存的api,应该就没问题了
使用retrofit 多图上传的时候有几率会出这个错,感觉是随机的,报告路径找不到: /data/data/com.cq.wsj.ecare/cache/picture_cache/1508404062974.png: open failed: ENOENT (No such file or directory)
同样的那几张图,多试几次,有时候能成功,有时候就报这个错,选择的图数量越多越容易报这个错,我在想,1508404062974.png 是压缩后随机取的名字,是不是有时候压缩后的这个文件名有冲突导致的? 权限和目录问题的话应该可以排除吧,因为有时候是可以成功的。也可能是我自己上传的方法有问题,下面是我的相关部分代码:
int num = 0; for (LocalMedia media : list) { //从路径取文件 File file = null; try { file = new File(media.getCompressPath()); } catch (Exception e) { mView.showError("文件为空"); return; }
//测试过,到这一步是没有出问题的,listPart的数量也是对的,下面上传的时候就报错了 mView.showLoadingDialog("正在上传..."); Subscription rxSubscription = mRetrofitHelper.uploadPhoto(deviceId, mView.getAlbumId(), listName, listPart)
下面是上传方法:
/**