2016-04-20 7 views
0

Я успешно реализовал загрузку структур каталогов с помощью Fine Uploader с помощью параметра dragAndDrop: reportDirectoryPaths. Каждый загруженный файл имеет свойство qqpath, чтобы обозначать путь, из которого он пришел.Можно ли загружать файлы * последовательно * через AJAX?

var exampleUploader = new qq.FineUploader({ 
    element: document.getElementById('fine-uploader'), 
    template: 'qq-template-manual-trigger', 
    request: { 
     endpoint: '/api/UploadDocuments', 
     params: { 
      param1: "Test1", 
      param2: "Test2" 
     } 
    }, 
    callbacks: { 
     onComplete: function (id, name, responseJSON, xhr) { 
      console.log("onComplete"); 
     }, 
     onAllComplete: function (id, name, responseJSON, xhr) { 
      console.log("onAllComplete"); 
     } 
    }, 
    multiple: true, 
    dragAndDrop: { 
     reportDirectoryPaths: true 
    }, 
    autoUpload: true, 
    debug: false 
}); 

Существует, однако, одна проблема: файлы загружаются один на один, но запрос Ajax называют иногда в то же самое время. Если два файла с одинаковой структурой каталогов будут переданы службе в то же самое время, каталоги могут быть созданы дважды за один раз. Есть ли способ сделать только запрос ajax для успеха предыдущего? Другими словами, есть ли способ загрузить файлы последовательно, а не в одно и то же время (целая куча файлов, передаваемых сразу в службу)?

Заранее спасибо, А.Я.

+0

уверен, просто есть 'success' обработчик самого вызова вызова ajax (например, рекурсия). поэтому вызов # 1 загружает файл # 1. когда этот вызов возвращается, он снова вызывает себя и запускает файл №2 и т. д., с другой стороны, это может быть неэффективным/медленным, поскольку вы выполняете отдельную загрузку HTTP для каждого файла. вы можете просто включить данные последовательности с файлами, чтобы сервер мог определить, что это такое. например 'File1 = SOMETEXT; file2 = othertext', и прислужьте искомый номер из имени: 'file1' ->' 1', "ah, это первый файл, создайте каталог # 2", затем "ah, это файл 2, поэтому создайте directory # 1 " –

+0

Вы пытались сделать это с помощью Fine Uploader или знакомы с этим элементом управления? – ajh

ответ

0

Проблема вы видите, это проблема с сервером, а не с ничего клиента/браузера на стороне. Это недальновидно, чтобы ограничить ваш интерфейс одним запросом за раз. Это представляет собой совершенно ненужное узкое место. Ваш сервер должен сортировать все это.

О подходе заключается в том, чтобы загружать загруженные файлы с помощью UUID, назначенного Fine Uploader, а затем сортировать иерархию хранилища позже. И если вы не хотите доверять UUID, предоставленному Fine Uploader, вы всегда можете создать свою собственную серверную часть, вернуть ее с ответом, а Fine Uploader будет использовать это для всех других запросов, связанных с этим конкретным файлом.

Другой подход заключается в том, чтобы ваш сервер просто проверял сервер, чтобы узнать, существует ли каталог для целевого файла.

Помните, что это свойство «qqPath», в котором вы находитесь, зависит только от Chrome/Opera и только при отбрасывании каталога.

+0

Благодарим вас за быстрый ответ. вы говорите, что нет способа ждать ответа успеха перед загрузкой другого файла? Я понимаю, о чем вы говорите, и у вас много хороших моментов. как это можно реализовать с помощью службы RESTful? и предполагая, что мы делаем то, что вы упомянули, как наш сервер узнает, когда загрузка действительно завершена (есть ли 30 или 40 файлов)? – ajh

+0

Я говорю, что нет веской причины ждать ответа успеха, прежде чем загружать другой файл в ваш случай, насколько я могу судить. Вы знаете, когда загрузка завершена на стороне клиента. Fine Uploader вызовет обработчик обратного вызова ['onAllComplete'] (http://docs.fineuploader.com/branch/master/api/events.html#allComplete). На этом этапе вы можете оповестить свой сервер. Это будет запущено, когда вся группа файлов будет загружена. –

+1

большое спасибо за вашу помощь. – ajh

0

Если вы хотите загрузить файлы один за другим с помощью тонкой загрузчиком самый простой способ ограничивает максимальные подключения к 1.

var exampleUploader = new qq.FineUploader({ 
    element: document.getElementById('fine-uploader'), 
    template: 'qq-template-manual-trigger', 
    request: { 
     endpoint: '/api/UploadDocuments', 
     params: { 
      param1: "Test1", 
      param2: "Test2" 
     } 
    }, 
    callbacks: { 
     onComplete: function (id, name, responseJSON, xhr) { 
      console.log("onComplete"); 
     }, 
     onAllComplete: function (id, name, responseJSON, xhr) { 
      console.log("onAllComplete"); 
     } 
    }, 
    maxConnections: 1, 
    multiple: true, 
    dragAndDrop: { 
     reportDirectoryPaths: true 
    }, 
    autoUpload: true, 
    debug: false 
}); 

По умолчанию в MaxConnections параметра равно 3.

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

  • Нет связанных вопросов^_^