我正在创建一个使用Sequelize作为我的ORM而不是Postgres的节点应用程序。但是Sequelize文档中没有提及如何进行datablob,特别是图像保存。有谁知道:
以下是我的示例模型的迁移文件
export default {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER,
},
firstName: {
allowNull: false,
type: Sequelize.STRING,
},
lastName: {
type: Sequelize.STRING,
},
photo: { <--------------------------- Image
type: Sequelize.BLOB,
},
email: {
type: Sequelize.STRING,
},
createdAt: {
allowNull: false,
type: Sequelize.DATE,
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE,
},
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Users');
},
};
以及小种子文件
export default {
up: (queryInterface, Sequelize) => {
/*
Add altering commands here.
Return a promise to correctly handle asynchronicity.
Example:
return queryInterface.bulkInsert('Persons', [{
name: 'John Doe',
isBetaMember: false
}], {});
*/
return queryInterface.bulkInsert('Users', [
{
firstName: 'Ricky',
lastName: 'Sparks',
// photo: <---------- what should I fill in here to seed with a photo file?
email: 'email@gmail.com',
createdAt: Sequelize.fn('NOW'),
updatedAt: Sequelize.fn('NOW'),
},
]);
},
down: (queryInterface, Sequelize) => {
/*
Add reverting commands here.
Return a promise to correctly handle asynchronicity.
Example:
return queryInterface.bulkDelete('Persons', null, {});
*/
return queryInterface.bulkDelete('Users', null, {});
},
};
答案 0 :(得分:1)
您可以尝试Sequelize-file,让它处理文件存储,与模型关联以及从blob读回。除此之外,您可以使用缓冲区,在您正在使用的框架的请求对象中流,模块通常会公开缓冲区或流或其他任何内容。
流程通常如下所示。
提交时
回复时
关于测试,您可以手动创建一些文件以及正确值为width / height / image type / etc的json文件,并使用它们以某种方式读取和提交或模拟文件。
我个人会尽量避免将文件存储到数据库中,因为你看到它甚至在理论上很难并且不容易测试等。相反,你可以将文件存储在带有编码文件名的文件系统中,将信息存储在数据库中,测试存在等等除非必要,否则比做所有这些更容易。