Coder Social home page Coder Social logo

Повторная загрузка файла после того как сервер вернул статус 500 about angular-file-upload HOT 7 CLOSED

nervgh avatar nervgh commented on May 28, 2024
Повторная загрузка файла после того как сервер вернул статус 500

from angular-file-upload.

Comments (7)

damirm avatar damirm commented on May 28, 2024

Oups, увидел что у меня не актуальная версия библиотеки. В актуальной как раз это исправлено.

from angular-file-upload.

damirm avatar damirm commented on May 28, 2024

Мм. Поспешил, теперь isComplete фактически оставил проблему. Не могу понять, каким же всё таки нужно пойти путём ?

from angular-file-upload.

nervgh avatar nervgh commented on May 28, 2024

Подскажите пожалуйста как загружать файлы повторно, если они не загрузились с первого раза?

item.upload();
// or
uploader.uploadItem([item|indexOfItem]);

Перед тем как загружать файлы, делается проверка:

Ситуация такая: допустим в настройках загрузчика стоит "автозагрузка" uploader.autoUpload = true. Если загрузка файла вернет ошибку, то загрузчик уйдет в бесконечный цикл:

  1. выбрать не загруженные файлы
  2. загрузить их
  3. если загрузка завершилась неудачей, GoTo 1
    Для решения этой проблемы был введен флаг item.isComplete = true; файл был загружен, причем успешно или не успешно не важно.
    Чтобы решить ваш казус, придется написать функцию получения файлов, загруженных с ошибкой:
uploader.getFilesWithUploadError = function() {
    return this.queue.filter(function (item) {
        return !item.isUploaded;
    });
};

var arr = uploader.getFilesWithUploadError();

arr.length && arr.forEach(function(item) {
    item.upload();
});

не проверял, но должно работать. Если возникнут проблемы, пишите.

Конечно, надо либо переименовать getNotUploadedItems, либо подумать, о том, как сделать получение незагруженных файлов более удобным...

from angular-file-upload.

damirm avatar damirm commented on May 28, 2024

Я решил пойти немного другим путём. Теперь всегда вызывается функция uploader.uploadAll(), и ожидается событие completeall

Но и здесь я столкнулся с вещью, которую впринципе решил, но суть вот в чем:

Ситуация: при submit'e формы вызывается uploadAll(), после того как файлы загружены - необходимо сделать некоторые действия. И если эти действия завершаются неудачей, далее юзер изменяет данные на валидные (например), и снова сабмитится форма. Опять вызывается метод uploadAll, НО! событие completeall в данном случае не выбрасывается, потому что все файлы в предыдущем запросе загрузились успешно.

Я добавил в метод uploadall строку

uploadAll: function () {
    var items = this.getNotUploadedItems().filter(function(item) {
        return !item.isUploading;
    });

    items.forEach(function(item) {
        item.index = item.index || this._nextIndex++;
        item.isReady = true;
    }, this);
    items.length && this.uploadItem(items[ 0 ]);

    // added
    items.length || this.trigger('completeall', this.queue);

    return this;
}

которая бросает событие completeall даже в том случае, если в очереди на загрузке не осталось ничего.

Может быть я архитектурно не верно мыслю?

from angular-file-upload.

nervgh avatar nervgh commented on May 28, 2024

Может быть я архитектурно не верно мыслю?

На первый взгляд, да. Чем не устроил мой вариант?

from angular-file-upload.

damirm avatar damirm commented on May 28, 2024

Ваш вариант полностью устроил, я лишь привел решение, к которому пришел не дождавшись вашей помощи :)

from angular-file-upload.

nervgh avatar nervgh commented on May 28, 2024

Ваш вариант полностью устроил, я лишь привел решение, к которому пришел не дождавшись вашей помощи

Кстати, я там ошибся ^__^ Правильней так будет:

uploader.getFilesWithUploadError = function() {
    return this.queue.filter(function (item) {
        return !item.isUploaded && item.isComplete;
    });
};

Читается как: если файл не загружен, но отправлялся на сервер / пытался загрузиться.

Хотя, наверное, проще будет флаг item.isError добавить.

from angular-file-upload.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.