Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 文件上载在Safari和Chrome iOS8.1.2上显示带空字符串的数据_Javascript_Ios_Google Chrome_File Upload_Safari - Fatal编程技术网

Javascript 文件上载在Safari和Chrome iOS8.1.2上显示带空字符串的数据

Javascript 文件上载在Safari和Chrome iOS8.1.2上显示带空字符串的数据,javascript,ios,google-chrome,file-upload,safari,Javascript,Ios,Google Chrome,File Upload,Safari,您好,我们在Chrome和IOS 8.1.2上的Safari上的文件上载有问题。一些照片上传显示的数据为空字符串,其他照片上传显示的是OK。有人知道一个解决方法,以便上传的照片可以一致地显示吗?非常感谢 起初,我们认为这是iOS 8 Safari上文件上传的已知问题。然而,它似乎是8.0.0的问题,应该已经修复了。此外,这个问题不仅限于Safari,也出现在Chrome iOS中 具体来说,当选择的照片直接从iPHONE摄像头拍摄时,数据似乎是空的,请参见登录控制台 [Log]Object co

您好,我们在Chrome和IOS 8.1.2上的Safari上的文件上载有问题。一些照片上传显示的数据为空字符串,其他照片上传显示的是OK。有人知道一个解决方法,以便上传的照片可以一致地显示吗?非常感谢

起初,我们认为这是iOS 8 Safari上文件上传的已知问题。然而,它似乎是8.0.0的问题,应该已经修复了。此外,这个问题不仅限于Safari,也出现在Chrome iOS中

具体来说,当选择的照片直接从iPHONE摄像头拍摄时,数据似乎是空的,请参见登录控制台

[Log]Object controllers.js,第228行 src:数据:

但是,当选择的照片是屏幕截图或从电子邮件保存的照片时,实际上会显示图像并发送数据

[Log]Object controllers.js,第228行 src:data:image/jpeg;base64、/9j/4AAQSKZJRGABAAQAABABABABAAAD/7QA4UGHVDG9ZAG9WIDMUMAA4QKLNBCAAAABDUHZJWCYBOMACZJS+EJ+/8AAEQGYATIAWEIAAQMRAF/EAB8AAAEFAQEBAQEBAAAAAAAAAAAAAAABAGMEBQYHCAKC//EALUQAIBAICBAWMCBAMFBQEABFQAEAQUECAQUISITFBBH

有没有人遇到过类似的问题?为什么它只适用于一些照片而不适用于其他照片?有人知道显示从相机本身拍摄的图像的方法吗

下面是代码片段:

$scope.getAlbumPicture = function() {
    Camera.getAlbumPicture().then(function(fileURI) {
        $scope.normalisePicture(fileURI, function(dataURL) {
            Local.setTemp(dataURL);
            $state.go('tab.camera-detail');
        });
    }, function(err) {
        console.log(err);
    });
};
$scope.readImage = function(input) {
    if (input.files && input.files[0]) {
        var fileReader = new FileReader();
        fileReader.onloadend = function() {
            $scope.normalisePicture(fileReader.result, function(dataURL) {
                Local.setTemp(dataURL);
                $state.go('tab.camera-detail');
            });
        };
        fileReader.readAsDataURL(input.files[0]);
    }
};
TL;DR最近我遇到了类似的问题,如问题中所述,发现这可能是iPhone内存不足的问题,除了使用canvas元素调整大尺寸图像的大小外,您可以做的工作不多,我使用1200作为图像的最长宽度/高度来调整大小,然后一切都恢复正常

对于任何功能参考,更具体的硬件和软件,我的测试中出现的问题是iPhone 6 Plus和iOS 8.1.2,我尝试对图像执行的过程是:

使用FileReader.onLoad=func和FileReader.readasdataurl将输入[type=file]的文件作为base64字符串读取。 将base64指定为新映像的src inside image.onload=func绘制一个新画布的二维上下文,其大小和高度与上面的图像相同。 检查一些方向EXIF信息,然后旋转画布。 最后,使用从canvas.toDataURL生成的新图像的base64字符串对其他工作人员进行处理。 空数据:在步骤1至步骤2和步骤5之间随机出现,具体取决于从`input[type=file]获取的图像大小


在我的例子中,iOS Safari在这里似乎可以将图像数据分配给具有相同宽度和高度的画布,但如果画布的大小非常大,则不可以将其分配给toDataURL。但是Safari无论如何都不会挂起,我可以重新点击输入[type=file]以获取下一个文件,因为空数据:从上一个文件中输出。

我发现这在ios上的最新版本Safari中有效,但chrome在移动设备上处理更大的文件时遇到问题。如果您尝试使用较小的文件,它可能会起作用,但这并不是您或我真正想要的解决方案