Разъем для хранения файлов loopback 3

Я новичок в loopback, и у меня есть форма, в которой есть некоторые поля с загрузкой файлов. теперь я могу хранить значения полей, используя PersistedModel с базой данных mysql.

Я хочу сохранить загрузку файла также в каком-то месте. Как это сделать, кто-нибудь может объяснить на примере. Я видел документацию по хранилищу loopback 3, но не смог ее получить. Я использую dropzone js для загрузки файлов. Вот мой код

<form  id = "myForm" novalidate>
   <div class = "form-row">
      <div class = "form-group col-md-6">
         <input type = "text" class = "form-control" id = "firstname" name = "firstname" placeholder = "First Name" required>
      </div>
   </div>
   <div class = "form-row">
      <div class = "form-group col-md-6">
         <input type = "email" class = "form-control" id = "email" name = "email" placeholder = "[email protected]" required>
         <div class = "invalid-feedback">Please Enter a Valid Email Id.</div>
      </div>
      <div class = "form-group col-md-6">
         <input type = "text" id = "role" name = "role" class = "form-control" placeholder = "Job Role" >
      </div>
   </div>
   <div class = "form-row">
      <div class = "form-group col-md-12">
         <textarea class = "form-control" id = "message" name = "message" placeholder = "Message" required></textarea>
      </div>
   </div>
   <div id = "resume" class = "dropzone form-control"></div>
   <input type = "submit" class = "btn btn-primary mt-10" id = "item-submit" value = "submit">
</form>

СЦЕНАРИЙ

<script type='text/javascript'>
   $("#myForm").submit(function(e) {
      e.preventDefault();
      var parms = {
   firstname : $("#firstname").val(),
   email : $("#email").val(),
   role : $("#role").val(),
   message: $("#message").val()
   };
   $.ajax({
   method: 'POST',
   url:  "http://localhost:3000/api/careers",
   async: false,
   dataType : "json",
   contentType: "application/json; charset=utf-8",
   data: JSON.stringify(parms),
   success: function(data){
   console.info('Submission was successful.');
   // location.reload();
   console.info(data);
   }, error: function (data) {
      console.info('An error occurred.');
      console.info(data);
         },   
      })
   });
</script>

Вы хотите загрузить файл с текстовыми полями и сохранить их в базе данных, а также сохранить файл по некоторому пути в вашем каталоге, верно? Вы хотите использовать AJAX или обычный метод загрузки в PHP/NodeJS?

Googlian 07.03.2019 05:54

@Googlian да, я хочу сохранить значения полей и файл

lakshmi priya 07.03.2019 05:58

в PHP или NodeJS?

Googlian 07.03.2019 05:59

NodeJS использую только loopback 3 для бэкенда

lakshmi priya 07.03.2019 06:03

Какой у вас внутренний код? Можете ли вы поместить пример кода серверной части

Googlian 07.03.2019 06:07

петлевая модель { "имя": "карьера", "база": "PersistedModel", "idInjection": правда, "параметры": {"validateUpsert": правда}, "свойства": { "идентификатор": { "тип" : "номер" },"имя": {"тип": "строка","обязательно": правда},"электронная почта": {"тип": "строка","требуется": правда},"роль": {"тип": "строка","требуется": истина}, "сообщение": {"тип": "строка","требуется": истина},"резюме": {"тип": "строка"} } , «проверки»: [], «отношения»: {}, «acls»: [], «методы»: {} }

lakshmi priya 07.03.2019 06:11

Вы ссылались на loopback.io/doc/en/lb2/Storage-component.html

Googlian 07.03.2019 06:16

да, я использую loopback3

lakshmi priya 07.03.2019 06:17

для загрузки вы можете использовать экспресс с мультером

Googlian 07.03.2019 06:24

как использовать можете пожалуйста привести пример

lakshmi priya 07.03.2019 06:30
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
10
215
2

Ответы 2

Используйте express.js с multer, чтобы легко загружать файлы и вставлять базу данных.

Multer — это промежуточное ПО node.js для обработки multipart/form-data, которое в основном используется для загрузки файлов. Это написано поверх официанта для максимальной эффективности.

Установите express и multer

npm install --save multer
npm install --save express

app.js в бэкенде

const express = require('express')
const path = require('path')
const multer = require('multer');

const port = 3000

var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, './uploads')
    },
    filename: function (req, file, cb) {
        cb(null, file.originalname)
    }
})

const upload = multer({ storage: storage })
const app = express()

app.get('/', function (req, res) {
    res.sendFile(path.join(__dirname + '/index.html'))
})

app.post('/upload', upload.single('avatar'), function (req, res, next) {

    var fileName = req.file.originalname

    // Do your database operations here
    console.info(fileName)

    res.send(req.file)
})

app.listen(port, () => console.info(`App listening on port ${port}!`))

index.html во внешнем интерфейсе

<form action = "/upload" method = "post" enctype = "multipart/form-data">
    <input type = "file" name = "avatar" />
    <input type = "submit" value = "Upload">
</form>

Спасибо, но с loopback3 это невозможно

lakshmi priya 07.03.2019 07:05

возможно, но это сложнее, чем этот способ, если вы хотите, вы можете следовать loopback.io/doc/en/lb2/Storage-component.html

Googlian 07.03.2019 07:09

Пожалуйста, примите ответ, если считаете его полезным.

Googlian 07.03.2019 07:09

Мне нужно использовать только с loopback 3. так что помогите мне в этом

lakshmi priya 07.03.2019 07:14

Вы ссылались на этот loopback.io/doc/en/lb2/Storage-component.html

Googlian 07.03.2019 07:15

Я сослался, но сомневаюсь, где путь к хранилищу файлов

lakshmi priya 07.03.2019 07:18

без посева внутреннего кода мы не можем определиться, не могли бы вы попробовать stackoverflow.com/questions/43409570/file-upload-with-loopba‌​ck

Googlian 07.03.2019 07:23

У меня тоже есть похожая реализация Проверь это

Однако вам необходимо указать контейнер хранилища, который вы используете, в файле datasources.json. Вот моя реализация соединителя хранилища.

localstorage: {
    "name": "localstorage",
    "connector": "loopback-component-storage",
    "provider": "filesystem",
    "root": "./files/",
    "nameConflict": "makeUnique",
    "maxFileSize": "104857600"
}

и в model-config.json добавьте это:

"Container": {
    "dataSource": "localstorage",
    "public": true
},

также не забудьте добавить Контейнер.json в папку общие/модели, которая будет выглядеть так:

{
   "name": "Container",
   "base": "Model"
}

Теперь вы сможете публиковать файлы по пути «/api/container».

Другие вопросы по теме