从我的Cordova应用程序上载文件到服务器时,我遇到一个非常奇怪的现象。
我的应用程序允许用户使用navigator.camera.getPicture选择2张图像(从相册/相机中选择),然后检索Camera.DestinationType.FILE_URI,该图像随后用于通过FileTransfer插件上载,并将文件按顺序发送到服务器。
现在,奇怪的问题是,在5-10%的时间内,我们的Android应用程序用户上传的2张照片最终都以BOTH为第二张照片。这意味着,在用户选择照片1和2并上载了照片和照片后,服务器端接收到的图像都是照片2。
我们尝试了向用户询问尽可能多的信息,并且将其范围缩小到了Android问题(在iOS上完美运行)。这很可能不是连接问题,因为无论是在Wifi还是3G上,用户都遇到了此问题,而且由于某些较新的型号也遇到了此问题,因此我们不确定这是否是内存问题。
我们尝试了很多次,但无法在我们的Android设备(包括速度较慢的旧设备)上重现此问题。
有没有人遇到过这种奇怪的问题,这是Camera插件或File Transfer插件的问题吗?我怀疑这与内存问题有关,在某种程度上,应用程序在上载之前丢失了或混淆了文件URI。
该问题仅以一种方式发生-因为在两张照片中都变成了照片2,但从未同时变成照片1。
请指教,谢谢!
[更新]
在显示由getPicture传递的FILE_URI值时,我注意到一种奇怪的现象。如果我再次为第二个图像调用getPicture,则插件使用的缓存文件保持不变。始终为“ file:///storage/sdcard0/Android/data/com.myapp/cache/modified.jpg?242432424”(结尾数字是随机的,但始终为“ modified.jpg”文件名)。
这导致第二个图像覆盖第一个图像。但是,我还没有弄清楚应用程序在大多数情况下如何成功上传2张单独的图像,而不是相同的重复图像。
这是一个插件错误,始终使用与缓存图像相同的文件名吗,并且可能与某些手机内存问题有关吗?有什么方法可以使它使用随机文件名,而不仅仅是将随机参数附加到同一文件中?
我的Android是4.3.1,运行的是Cordova 3.6。
以下是我正在使用的getPicture代码:
navigator.camera.getPicture(function(imageData) { uploadPhoto(imageData) }, onCameraFail, {
destinationType: Camera.DestinationType.FILE_URI, sourceType : Camera.PictureSourceType.PHOTOLIBRARY, allowEdit: false, correctOrientation: true, saveToPhotoAlbum: false, targetWidth: 1280, targetHeight: 960
});
最佳答案
相机插件的版本2.1.0已经解决了该错误。
该补丁已于2015年10月16日应用。
升级插件至少可以解决我的问题。