我在将文件从我的Cordova应用上传到服务器时遇到了一个非常奇怪的现象。Cordova图片上传重复问题
我的应用程序允许用户使用navigator.camera.getPicture选择2张图片(从相册/相机),然后检索Camera.DestinationType.FILE_URI,稍后用于通过FileTransfer插件上传,将文件发送到服务器按顺序。
现在,奇怪的问题是,5-10%的时间,由我们的Android应用程序用户上传的2张照片最终以BOTH作为第二张照片。这意味着,在用户选择了照片1和2并同时上传后,服务器端收到的照片都是照片2.
我们已经尝试询问用户尽可能多的信息,我们将其缩小到Android的问题(在iOS上完美运行)。这很可能不是连接问题,因为无论用户使用Wifi还是3G,用户都会遇到此问题,而且我们不确定是否存在内存问题,因为一些较新的型号也遇到了此问题。
我们尝试了很多次,但无法用我们的Android设备(包括较慢,较旧的设备)复制此问题。
有没有人遇到这样一个奇怪的问题,这是一个相机插件或文件传输插件的问题?我怀疑它与内存问题有关,在上传之前,应用程序以某种方式丢失或混淆了文件URI。
问题只发生一个办法 - 在两张照片成了照片2张,但从来都成为照片1.
请指教,谢谢!
[UPDATE]
我注意到在显示由Getpicture中传递的FILE_URI值的怪异现象。如果我再次为第二张图片调用getPicture,插件使用的缓存文件保持不变。它始终是“file:///storage/sdcard0/Android/data/com.myapp/cache/modified.jpg?242432424”(结尾的数字是随机的,但始终是“modified.jpg”文件名)。
这会导致第二张图像覆盖第一张图像。但是,我还没有弄清楚大多数时候应用程序是如何成功上传2张独立的图片而不是相同的副本的。
这是一个插件的bug,总是使用相同的文件名作为缓存的图像,并可能与某些手机内存问题有关?有什么办法可以让它使用随机文件名,而不是只是将随机参数附加到同一个文件中?
我的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
});
这个问题可能在你的javascript代码中 - 也许你可以发布你上传的地方。 –
我刚刚添加了Javascript代码,您可以请看一下吗?谢谢。 – Andy
我刚发现这个奇怪的bug可能与Camera插件的getPicture有关,并且更新它来显示我的getPicture Javascript。谢谢。 – Andy