首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将图片从url保存到nodejs中的db

将图片从url保存到nodejs中的db
EN

Stack Overflow用户
提问于 2020-10-10 22:35:57
回答 1查看 145关注 0票数 0

我对nodejs比较陌生。我正在尝试保存一个url中提供的图像(从api)。经过一些在线研究,我决定使用nodejs的createWriteStream方法从url中提取图片并保存到本地目录中。但我希望能够直接保存到mongodb。我不知道如何在mongodb中将目标更改为集合。

我的代码片段如下所示:

代码语言:javascript
运行
复制
const fs = require('fs');
const request = require('request');
const Image = require('./models/Image');

const connectDB = require('./db');

connectDB();

const imageName = 'photo-' + Date.now();
const ext = 'jpg';


const url = 'https://some_path_for_image_by_api';

const getData = async (u, cb) => {
  const myImage = await request(url).pipe(
    fs.createWriteStream(`${imageName}.${ext}`)
  );
  cb(myImage);
};

const saveData = async (d) => {
  const image = await new Image(d);

  image.save(function (err, data) {
    if (err) return console.error(err);
    else return console.log('Image saved successfully', data);
  });
};

getData(url, saveData);

下面是我的Image模式定义:

代码语言:javascript
运行
复制
const mongoose = require('mongoose');

const ImageSchema = new mongoose.Schema({
  createdAt: {
    type: Date,
    default: Date.now,
  },
  img: {
    data: Buffer,
    contentType: String,
  },

module.exports = mongoose.model('Image', ImageSchema);

使用此代码,图像将从url保存到文件夹中的根目录(不需要)。图像文档是创建的,但只包含ObjectId和版本,而不是实际数据。其目标是能够将从url检索到的图像作为文档直接保存到mongodb,而不会将任何内容保存到根目录。也许我做得不对。如何将其保存到数据库中,而不是保存到目录中的某些文件夹或根目录?任何帮助和建议都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-10-11 03:47:46

看起来模型中唯一的字段是createdAt,所以图像数据本身不会被保存。为了保存图像数据,您需要向模型中添加适当的字段。

来自Mongoose文档:

选项(默认情况下启用)可以确保传递给模型构造函数的值不会保存到数据库中,这些值没有在模式中指定。

https://mongoosejs.com/docs/guide.html#strict

从发布模式开始编辑:试试这个。

代码语言:javascript
运行
复制
const ImageSchema = new mongoose.Schema({
  createdAt: {
    type: Date,
    default: Date.now(),
  },
  img: {
    type: Buffer
  }
});

然后,您需要在模型中按名称设置该字段。类似于:

代码语言:javascript
运行
复制
const image = new Image({ img: d });

其中,字段名称为buffer

我不熟悉fs,所以在这里我帮不了太多忙,但这里假设d包含一个字节数组。如果它当前不是字节数组,我认为下一步将是将其转换为字节数组,以便将其保存到MongoDB。这个答案可能会对这一部分有所帮助:

https://stackoverflow.com/a/31217387/1520071

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64294562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档