墨水文件选择器回调调用太早了。如何检测文件何时可用?

时间:2013-08-07 21:29:25

标签: filepicker.io

使用filepicker.io上传文件时,会在文件实际可用之前调用filepicker.pick成功回​​调。这是代码:

        filepicker.pick({
            mimetypes: ['image/*'],
            container: 'modal',
            services:['COMPUTER', 'FACEBOOK', 'INSTAGRAM', 'WEBCAM']
        },
        function(inkBlob){
            $('img.foo').attr('src', inkBlob.url);
        },
        function(FPError){
            console.log(FPError.toString());
        });

我在回调中的inkBlob中得到一个url,但有时如果我将该url插入dom(如上所述),我会得到404.其他时候它可以工作。我正在寻找一种可靠的方法来了解何时可以使用filepicker返回的文件。我认为成功的回调是它,但似乎有这种竞争条件。

我意识到我可以在setTimeout中包装成功回调,但这看起来很混乱,如果文件实际可用,我不想让用户等待。

2 个答案:

答案 0 :(得分:1)

我和你有同样的问题。我的解决方法是将onError事件附加到图像并让它在404上重试(可以设置重试次数以避免无限循环),但它非常难看和混乱,所以如果有人带来更好的话会很棒溶液

答案 1 :(得分:1)

您还可以使用事件侦听器。

我有一个ajax调用,在Ink被墨迹裁剪后下载图像。这个电话零星失败了。我通过大致如下操作修复它:

filepicker.convert(myBlob, 
    { 
        crop: cropDimensions
    },
    function(croppedBlob) {

        function downloadImage() { 
            ...
        }

        var imageObj = new Image();
        imageObj.onLoad(downloadImage()); //only download when image is there
        imageObj.src = croppedBlob.url;
    }
);