从我的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日应用。

升级插件至少可以解决我的问题。

10-07 19:20
查看更多