Найти - Пользователи
Полная версия: Загрузка файлов и пересылка их на другой ресурс
Начало » Django » Загрузка файлов и пересылка их на другой ресурс
1
Master_Sergius
Имеется серьёзное приложение с веб-интерфейсом. В одной из вкладок нужно сделать красивый интерфейс для работы со сторонним ресурсом через его API. Что нужно - загрузить файлы с локального компьютера и отослать их на тот сторонний ресурс, получить хеши файлов, ибо по хешах потом нужно достать отчёты по файлах с того же стороннего ресурса.
Насчёт загрузки файлов вроде более-менее понятно - https://docs.djangoproject.com/ja/1.9/topics/http/file-uploads/

Но вот вопрос, единственный ли это способ? Можно ли как-то передать файлы с помощью JQuery в стиле:
 $.post('send_files', files).done(делаем что-то).fail(делаем что-то другое)
, где send_files - это урл джанги, который связан с вьюшкой? Ибо мне ещё надо некоторые связанные действия на странице сделать. Или может быть у кого-то была подобная задача, прошу поделиться хотя бы алгоритмом, может быть советы хоть какие-то.

Вот, нашел такое на stackoverflow:
http://stackoverflow.com/questions/20822823/django-jquery-ajax-file-upload

Использовал ту ajax-функцию, но в браузере в Post не показывает файла, есть лишь csrf-token и другие поля формы, но только не файл. Возможно, имеет смысл спросить на JS/JQuery форумах…

Вот, такой код заработал и отослал файл:

 var csrftoken = document.getElementsByName('csrfmiddlewaretoken')[0].value
var formData = new FormData($("#send_file_form")[0]);
var formData = new FormData(); 
formData.append("file", $('#file_input')[0].files[0]);
formData.append("csrfmiddlewaretoken", csrftoken);
$.ajax({  
   type: "POST", 
   url: "send_files",  
   data: formData, 
   contentType: false, 
   processData: false, 
});  

Как видно, он отсылает первый файл, ну в теории, циклом пройтись и подобавлять в форму можно все файлы. Главное, что django приняло файл в request.FILES переменную. Теперь надо подпилить всё немного, может чего доброго и выйдет.

Таки вышло, вот так пока-что работает, нужно ещё украсить:

 var formData = new FormData($("#scan_files_form")[0]);
var formData = new FormData();
var files = $('#files')[0].files;
for (var i = 0; i < files.length; i++) {
       var file = files[i];
       formData.append('files', file, file.name)
 }
var csrftoken = $('#csrftoken').val();
formData.append("csrfmiddlewaretoken", csrftoken);
var description = $('#description').val();
formData.append("description", description);
$.ajax({
     type: "POST",
     url: "scan_files",
     data: formData,
     contentType: false,
     processData: false,
});

В Django (версия 1.5) вот прием:
 file_list = request.FILES.getlist('files')

Ну и сама форма должна быть с такими параметрами:

 <form id="scan_files_form" enctype="multipart/form-data" method="post" name="scan_files_form">

Теперь можно приступать ко второй части - передачу этих файлов дальше.
inoks
Серьезному приложению нужны серьезные программисты!

P.S. В чем вопрос?
Master_Sergius
inoks
Серьезному приложению нужны серьезные программисты!P.S. В чем вопрос?

Сначала блы вопрос. Пока никто ничего не ответил, сам всё решил и поделился ответом.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB