2015-05-11 1 views
0

Я в настоящее время ищу HTML5 и загрузчик файлов на основе Javascript и наткнулся на загрузку файла jQuery. Загрузка файла jQuery, похоже, имеет все, что мне нужно. https://blueimp.github.io/jQuery-File-Upload/basic.htmljQuery Загрузка файла, включение двоичного файла

Чтобы быстро проверить возможности загрузки файлов jQuery в связи с Django, мне посчастливилось найти проект «django-jquery-file-upload» на GitHub. Этот пример отлично работает с файлами изображений gif, jpeg и png.

Проблема:

Я требую JQuery File Upload позволяет пользователям загружать бинарные файлы с мим типов «приложения/октет потока» и с расширением «АБВ». Кроме того, я хочу увеличить максимальный размер загружаемого файла до 30 МБ. На первый взгляд все это кажется довольно прямо вперед, так как JQuery загрузки файлов поставляется с «acceptFileTypes» и «MaxFileSize» свойства. Однако эти свойства почему-то не принимаются во внимание. В течение нескольких часов я не устраивал работу. Я также попытался выполнить большинство предложений, предоставленных с помощью stackoverflow.com/questions/17451629/maxfilesize-and-acceptfiletypes-in-blueimp-file-upload-plugin-do-not-work-why

Как я могу получить базовый пример f («picture_basic_form.html») на github.com/sigurdga/django-jquery-file-upload, чтобы включить его для загрузки «application/octet-stream»?

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
 
<!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included --> 
 
<script src="{{ STATIC_URL }}js/vendor/jquery.ui.widget.js"></script> 
 
<!-- The Iframe Transport is required for browsers without support for XHR file uploads --> 
 
<script src="{{ STATIC_URL }}js/jquery.iframe-transport.js"></script> 
 
<!-- The basic File Upload plugin --> 
 
<script src="{{ STATIC_URL }}js/jquery.fileupload.js"></script> 
 
<!-- Bootstrap JS is not required, but included for the responsive demo navigation --> 
 
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> 
 
<script src="{{ STATIC_URL }}js/jquery.cookie.js"></script> 
 
<script> 
 
/*jslint unparam: true */ 
 
/*global window, $ */ 
 
function csrfSafeMethod(method) { 
 
    // these HTTP methods do not require CSRF protection 
 
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); 
 
} 
 
$(function() { 
 
    'use strict'; 
 
    // Change this to the location of your server-side upload handler: 
 
    var url = '/upload/basic/'; 
 
    var csrftoken = $.cookie('csrftoken'); 
 
    $('#fileupload').fileupload({ 
 
     url: url, 
 
     crossDomain: false, 
 
     beforeSend: function(xhr, settings) { 
 
      if (!csrfSafeMethod(settings.type)) { 
 
       xhr.setRequestHeader("X-CSRFToken", csrftoken); 
 
      } 
 
     }, 
 
     dataType: 'json', 
 
     done: function (e, data) { 
 
      $.each(data.result.files, function (index, file) { 
 
       $('<p/>').text(file.name).appendTo('#files'); 
 
      }); 
 
     }, 
 
     progressall: function (e, data) { 
 
      var progress = parseInt(data.loaded/data.total * 100, 10); 
 
      $('#progress .progress-bar').css(
 
       'width', 
 
       progress + '%' 
 
      ); 
 
     } 
 
    }).prop('disabled', !$.support.fileInput) 
 
     .parent().addClass($.support.fileInput ? undefined : 'disabled'); 
 
}); 
 
</script>

+0

Возможно, это пробная версия на стороне сервера, так как я не вижу ничего, что может ограничить загрузку файла в вашем коде, а также из демонстрации JQUEY UI: «В этой демонстрации разрешены только файлы изображений (JPG, GIF, PNG) (по умолчанию не существует ограничения на тип файла). ' – Razorphyn

+0

Плюс js для проверки соответствия или расширения не является надежным, так как они ненадежны и подвержены всплеску, плюс у вас проблемы. Я бы опирался только на php – Razorphyn

ответ

0

Решение:

@Razorphyn, вы правы, проблема была на стороне сервера. После вашего комментария я снова просмотрел его и нашел. models.ImageField пришлось изменить на models.FileField.

- file = models.ImageField(upload_to="pictures") 
 
+ file = models.FileField(upload_to="pictures")

Рабочий пример можно найти по адресу https://github.com/quater/django-jquery-file-upload.