Nano Hash - криптовалюты, майнинг, программирование

Загрузка файла на веб-сервер EC2 из веб-приложения

Я создаю простое приложение, используя Sails.js. В основном он создает новый элемент, затем сохраняет его в базе данных и загружает изображение на S3.

Вот что происходит: Когда я запускаю свое приложение на своем локальном компьютере, оно ведет себя нормально. В req.body есть содержимое, а req.file('item-image') не пуст. Сейчас я запускаю его на EC2, и проблема в том, что req.body - это просто пустой объект, но req.file('item-image') не пуст. Я пробовал разные сценарии отладки, см. их ниже:

  1. Если я удалю enctype="multipart/form-data" (я знаю, что это нужно для загрузки файла, просто пытаюсь), я получаю ожидаемый объект req.body, но, как и ожидалось, req.file('item- изображение') пусто.

  2. Я вернул enctype="multipart/form-data", затем попытался отправить запрос без файла, я получил ожидаемый объект req.body.

  3. Я включил изображение в свой запрос, объект req.body пуст, а req.file('item-image') - нет.

Самое странное, когда я отправляю свой запрос через почтальона, все ведет себя так, как ожидалось. Я действительно потерялся, см. мой код ниже:

create_event.ejs

<form action=<%= event.createUrl %> method="POST" id="form-item" enctype="multipart/form-data">
<div class="modal-dialog">
  <div class="modal-content">
    <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal">&times;</button>
      <h4 class="blue bigger">Please fill the following form fields</h4>
    </div>

    <div class="modal-body overflow-visible">
      <div class="row">
        <div class="col-xs-12 col-sm-5">
          <div class="space"></div>

          <input type="file" name="item-image"/>
        </div>

        <div class="col-xs-12 col-sm-7">
          <div class="form-group">
            <label for="form-field-username">Name</label>

            <div>
              <input class="input-large" type="text" id="form-field-username" placeholder="Item Name" name="item-name" />
            </div>
          </div>

          <div class="space-4"></div>

          <div class="form-group">
            <label for="form-field-username">Description</label>

            <div>
              <input class="input-large" type="text" id="form-field-username" placeholder="Item Description" name="item-description"/>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="modal-footer">
      <button class="btn btn-sm" data-dismiss="modal">
        <i class="icon-remove"></i>
        Cancel
      </button>

      <button class="btn btn-sm btn-primary" id="save-item">
        <i class="icon-ok"></i>
        Save
      </button>
    </div>
  </div>
</div>
</form>

create_event.js

$('#save-item').on('click', function(e){
        var response = confirm('Are you sure you want to continue saving this item?');
        if(response == true) {
            $('#form-item').submit();
        }
    });

AdminController.js

createItem: function(req, res){
    console.log('Saving..');
    console.log(req.body);
    var eventId = req.path.split('/')[4];
    req.file('item-image').upload(function callback(error, uploadedFile){
        if(error) {
            console.log(error);
            return res.serverError();
        }
        console.log(uploadedFile);

        s3Helper.upload(uploadedFile[0], function(error, data){
            if(error) {
                return res.serverError();
            }

            var item = {
                ITEM_ID: uuid.v1(),
                EVENT_ID: req.path.split('/')[4],
                NAME: req.body['item-name'],
                DESCRIPTION: req.body['item-description'],
                IMAGE_URL: data.Location
            }

            EventItem.create(item, function(error, data){
                if(error) {
                    console.log(error);
                    return res.serverError();
                }
                console.log('Successfully saved data: ');
                console.log(data);
                return res.redirect('/admin/events/' + eventId);
            });
        });
    });
},

Спасибо!


  • Прикрепили ли вы роль IAM с разрешением S3 при запуске инстанса EC2? 22.01.2017
  • Да, у него достаточно прав для загрузки файлов S3 и доступа к ним. 07.02.2017

Ответы:


Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..