Показать изображение после того, как изображение было загружено с использованием CollectionFS

Изображения загружаются в AWS S3 с использованием Meteor.js и CollectionFS. Загружаемое изображение выбирается через поле ввода файла.

'change .upload-input': function() {
    Images.insert(imageFile, function(err, fileObj) {
        Albums.update({_id: albumId}, {$set: { 
            'photo': BASE_URL + fileObj._id + 'photo.jpg'
        }})
    })
}

На той же странице у нас есть img с src установите для отображения URL недавно загруженного изображения.

{{#with album}}
    <img src="{{ photo }}">
{{/with}}

Проблема: Однако страница пытается загрузить это новое изображение до завершения его загрузки на S3 AWS, выдавая ошибку

GET https://s3.amazonaws.com/myBucket/images/2nkLHcHsqxYrqW3hM-photo.jpg 403 (Forbidden)

Изображение загружается на страницу после обновления страницы.

Как мы можем избежать загрузки изображения до его полной загрузки в S3?

2 ответа

Боюсь, я не использовал CollectionFS, но, как подсказывает user3452997, вы можете использовать API-интерфейс HTML5 FileReader для предварительного просмотра изображения примерно так:

'change .upload-input': function(e) {
    var file = e.target.files[0];
    // Rudimentary check that we're dealing with an image
    if (file && file.type.substring(0,6) === 'image/') {
        var reader = new FileReader();
        reader.onload = function() {
            $('#imgId').attr('src', reader.result);
        }
    }
}

Затем пользователь будет видеть локальную версию изображения до тех пор, пока он не обновит браузер, и к этому времени, мы надеемся, удаленное изображение будет загружено.

В качестве альтернативы, я думаю, вам нужен какой-то обратный вызов, когда CollectionFS завершит загрузку.

Если CollectionFS не предоставляет этого, я думаю, что действительно удачным решением было бы создать помощника, который вернул фотографию после задержки (например, в пределах setTimeout), чтобы у нее было время для загрузки.

В случае с AWS-S3 вы можете попробовать https://atmospherejs.com/edgee/slingshot

См. Раздел "Показать загруженный файл до его загрузки"

Другие вопросы по тегам