2017-02-17 3 views
0

Мне нужно, чтобы файлы разных типов отправлялись в разные пункты назначения.Как изменить назначение загрузки по типу файла с помощью Dropzone.js?

Как вы можете переписать Dropzone.prototype.processQueue или Dropzone.prototype.processFiles для отправки в разные пункты назначения.

Я не уверен, что если асинхронная работа вокруг должна быть на месте, чтобы обменять this.options.url.

+0

По месту назначения, вы имеете в виду разные адреса? –

ответ

1

Хотя @ ответ Inkdot является технически правильным, это не самый лучший способ сделать это, так как это может привести к состоянию гонки.

Лучший способ заключается в использовании функции в качестве параметра url:

Dropzone.options.url = function(files) { 
    let url = 'upload/path'; 
    if (/(jpg|jpeg)$/.test(files[0])) url = 'path/to/jpeg'; 
    return url; 
} 

Эта функция будет вызываться в функции uploadFiles(), что является шагом, который фактически загружает файлы.

Для получения дополнительной информации см. the documentation on the url parameter.

+0

Условия участия в Javascript отсутствуют. Решение Inkdot будет работать отлично. –

+1

Есть условия гонки, потому что функция 'accept' и фактическая функция' upload' могут не запускаться в одном потоке, но асинхронно или нет в том же порядке, в котором они были добавлены. Я написал библиотеку и возможность предоставить функцию «url» по этой точной причине. – enyo

+0

У Javascript только одна тема. Сетевые запросы выполняются изначально браузером и могут выполняться одновременно, но обратные вызовы выполняются в потоке Javascript и могут быть вызваны только последовательно. То, что вы описываете, не является условием гонки, это проблема с обратным вызовом AJAX. Вы не знаете порядок, в который будут вызваны обратные вызовы, но это не состояние гонки. –

0

Я считаю, что вы можете достичь этого, используя объект «Dropzone.options». редактировать: вот в документации по http://www.dropzonejs.com/#configuration

// "myAwesomeDropzone" is the camelized version of the HTML element's ID 
 
Dropzone.options.myAwesomeDropzone = { 
 
    paramName: "file", // The name that will be used to transfer the file 
 
    maxFilesize: 2, // MB 
 
    accept: function(file, done) { 
 
    // if file name includes .jpg set the upload url to the correct jpg folder 
 
    if (file.name.includes('.jpg')) { 
 
     url: 'path/to/jpg/files'; 
 
     done(); 
 
    } 
 
    // same as above but for .png files, you could also use a switch statement 
 
    if (file.name.includes('.png')) { 
 
     url: 'path/to/png/files'; 
 
     done(); 
 
    } 
 
    } 
 
};

Смежные вопросы