环回 3 文件存储连接器

Posted

技术标签:

【中文标题】环回 3 文件存储连接器【英文标题】:loopback 3 file storage connector 【发布时间】:2019-07-28 21:17:25 【问题描述】:

我是环回的新手,我有一个表单,其中包含一些带有文件上传的字段。现在我可以使用带有 mysql 数据库的 PersistedModel 来存储字段值。

我也想将文件上传保存在某个位置。如何做到这一点任何人都可以举例说明。我已经看过环回 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="example@gmail.com" 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.log('Submission was successful.');
   // location.reload();
   console.log(data);
   , error: function (data) 
      console.log('An error occurred.');
      console.log(data);
         ,   
      )
   );
</script>

【问题讨论】:

您想上传带有文本字段的文件并将它们存储到数据库中,同时将文件存储到您目录中的某个路径中吗?你想在 php/NodeJS 中使用 AJAX 还是普通的上传方式? @Googlian 是的,我想存储字段值和文件 在 PHP 或 NodeJS 中? NodeJS 只使用 loopback 3 作为后端 你的后端代码是什么?能不能把后端示例代码放上来 【参考方案1】:

使用express.jsmulter 轻松上传文件和插入数据库。

Multer 是一个处理multipart/form-data 的node.js 中间件,主要用于上传文件。它写在 busboy 的顶部以获得最大的效率。

安装expressmulter

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.log(fileName)

    res.send(req.file)
)

app.listen(port, () => console.log(`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【参考方案2】:

我也有类似的实现check this out

但是,您需要在 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
,

不要忘记在 common/models 文件夹中添加 Container.json,如下所示:


   "name": "Container",
   "base": "Model"

现在您可以将文件发布到“/api/container”路径

【讨论】:

以上是关于环回 3 文件存储连接器的主要内容,如果未能解决你的问题,请参考以下文章

如何禁止mysql的dns反查功能

openstack对接glusterfs存储

爬虫文件存储-3:Redis

架构设计:系统存储(28)——分布式文件系统Ceph(挂载)

架构设计:系统存储(28)——分布式文件系统Ceph(挂载)

1mongoDB服务器的搭建与连接