Я новичок в 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>
@Googlian да, я хочу сохранить значения полей и файл
в PHP или NodeJS?
NodeJS использую только loopback 3 для бэкенда
Какой у вас внутренний код? Можете ли вы поместить пример кода серверной части
петлевая модель { "имя": "карьера", "база": "PersistedModel", "idInjection": правда, "параметры": {"validateUpsert": правда}, "свойства": { "идентификатор": { "тип" : "номер" },"имя": {"тип": "строка","обязательно": правда},"электронная почта": {"тип": "строка","требуется": правда},"роль": {"тип": "строка","требуется": истина}, "сообщение": {"тип": "строка","требуется": истина},"резюме": {"тип": "строка"} } , «проверки»: [], «отношения»: {}, «acls»: [], «методы»: {} }
Вы ссылались на loopback.io/doc/en/lb2/Storage-component.html
да, я использую loopback3
для загрузки вы можете использовать экспресс с мультером
как использовать можете пожалуйста привести пример

Используйте 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 это невозможно
возможно, но это сложнее, чем этот способ, если вы хотите, вы можете следовать loopback.io/doc/en/lb2/Storage-component.html
Пожалуйста, примите ответ, если считаете его полезным.
Мне нужно использовать только с loopback 3. так что помогите мне в этом
Вы ссылались на этот loopback.io/doc/en/lb2/Storage-component.html
Я сослался, но сомневаюсь, где путь к хранилищу файлов
без посева внутреннего кода мы не можем определиться, не могли бы вы попробовать stackoverflow.com/questions/43409570/file-upload-with-loopback
У меня тоже есть похожая реализация Проверь это
Однако вам необходимо указать контейнер хранилища, который вы используете, в файле 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».
Вы хотите загрузить файл с текстовыми полями и сохранить их в базе данных, а также сохранить файл по некоторому пути в вашем каталоге, верно? Вы хотите использовать AJAX или обычный метод загрузки в PHP/NodeJS?