Большой файл загружается несколько раз при загрузке файла jquery

  • Я привел пример для загрузки файла jquery и создал демонстрационное приложение, которое отлично работает, и я могу загружать файлы хорошо.
  • но та же самая интеграция, которую я сделал в другом приложении, и она не работает должным образом, разница здесь только в том, что у демо был формат.erb, а у этого приложения был формат.haml.
  • здесь также я могу загружать файлы до 100 МБ, но файлы выше, которые занимают время, и в журнале сервера отображается "Нет ошибки памяти - не удалось выделить память". и снова начинается загрузка.
  • и когда я обновляю страницу после отмены, я вижу, что файл загружается несколько раз. Я не могу найти правильную причину этой проблемы, это проблема низкого ОЗУ, и если это так, то же самое работает нормально для демонстрационного приложения, я загрузил до 6 ГБ через это.
  • вот мой код

    application.js

    $(document).ready(function(){
    var fileUploadErrors = {
      maxFileSize: 'File is too big',
      minFileSize: 'File is too small',
      acceptFileTypes: 'Filetype not allowed',
      maxNumberOfFiles: 'Max number of files exceeded',
      uploadedBytes: 'Uploaded bytes exceed file size',
      emptyResult: 'Empty file upload result'
      };
    $('#fileupload').fileupload({
      autoUpload : true,        
      maxRetries : 100,
      retryTimeout : 500,
      fail : function(e, data) {
        var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload'), retries = data.context.data('retries') || 0, retry = function() {
          $.getJSON('#fileupload', {
            file : data.files[0].name
          }).done(function(result) {
            var file = result.file;
            data.uploadedBytes = file && file.size;
            data.data = null;
            data.submit();
          }).fail(function() {
            fu._trigger('fail', e, data);
          });
        };
        if (data.errorThrown !== 'abort' && data.uploadedBytes < data.files[0].size && retries < fu.options.maxRetries) {
          retries += 1;
          data.context.data('retries', retries);
          window.setTimeout(retry, retries * fu.options.retryTimeout);
          return;
        }
        data.context.removeData('retries');
        $.blueimp.fileupload.prototype.options.fail.call(this, e, data);
      }
    });
    $.getJSON($('#fileupload').prop('action'), function (files) {
      var fu = $('#fileupload').data('blueimpFileupload'), 
        template;
      fu._adjustMaxNumberOfFiles(-files.length);
      console.log(files);
      template = fu._renderDownload(files)
        .appendTo($('#fileupload .files'));
      fu._reflow = fu._transition && template.length &&
        template[0].offsetWidth;
      template.addClass('in');
      $('#loading').remove();
    });
    

контроллер

def index
    @assets = Asset.all
    respond_to do |format|
      format.html
      format.json { render json: @assets.map{|asset| asset.to_jq_asset } }
    end
  end

модель

class Asset < ActiveRecord::Base
  has_attached_file :upload
  do_not_validate_attachment_file_type :upload
  include Rails.application.routes.url_helpers
  def to_jq_asset
    {
      "id" => read_attribute(:id),
      "name" => read_attribute(:upload_file_name),
      "size" => read_attribute(:upload_file_size),
      "content_type" => read_attribute(:upload_content_type),
      "url" => upload.url(:original),
      "delete_url" => asset_path(self),
      "delete_type" => "DELETE" 
    }
  end
end
  • index.html.haml Я попытался добавить свой индексный файл здесь, но редактор не принимает его. так что вы можете сослаться на эту ссылку

Для этого я использовал rails 4, ruby ​​2.1.0, а для загрузки файлов использовали paperclip и jquery-fileupload-rails gem Заранее спасибо.

1 ответ

Решение
  • Я исправил эту проблему, сравнил gem-файл для моего демонстрационного приложения и этого приложения и обнаружил, что версия rails здесь - 4.0.2, а в демонстрационном приложении - 4.1.0. Так что обновил этот драгоценный камень и вуаля все прекрасно работает.
  • также одна вещь после обновления до 4.1.0 у меня была ошибка как "неопределенный метод`environment'для nil:NilClass", это было связано с sass-rails. Я должен обновить это также, и с этим мне также нужно было установить звездочки до версии 1.11.0, потому что после установки пакета это обновляется до 1.12.0.
  • надеюсь, это поможет кому-то