- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 Node + Express 4 + MongoDB + Mongoose 构建一个 RESTful API。
我的 API 需要做的一件事是存储和检索文件。我将存储在 Amazon S3 中。 Mongoose 有一个特定的插件,用于将文件附加到 Mongo 文档,称为 Mongoose-Crate ,它又有一个存储提供程序 Mongoose-Crate-S3将文件上传到 S3。
我已尽最大努力调整 Mongoose-Crate-S3 npm 页面中的示例代码以用作快速路由,但到目前为止我还没有获得成功上传到我的 S3 存储的图像。我的"file"模型的文档正在我的 mongo 数据库中创建,但只有“_id”和“__v”字段。没有“标题”,没有“描述”,没有任何迹象表明 .post 端点实际上正在接收我尝试发布的文件。我一直在对我的代码进行细微的调整,但我通常会收到一些关于“无法获得任何响应”的变化。
这是我的 mongoose 模式 file.js(当然删除了我的 S4 凭据)
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var crate = require('mongoose-crate');
var S3 = require('mongoose-crate-s3');
var FileSchema = new Schema({
title: String,
description: String
});
FileSchema.plugin(crate, {
storage: new S3({
key: '<api-key-here>',
secret: '<secret-here>',
bucket: '<bucket-here>',
acl: '<acl-here>', // defaults to public-read
region: '<region-here>', // defaults to us-standard
path: function(attachment) { // where the file is stored in the bucket - defaults to this function
return '/' + path.basename(attachment.path)
}
}),
fields: {
file: {}
}
});
module.exports = mongoose.model('File', FileSchema);
这是我的 api 路由文件的相关片段。我相当确定我需要修复的代码在此处。
apiRouter.route('/files')
.post(function(req, res){
var file = new File()
//.attach = function(field, attachment, callback)
file.attach('image', req.body, function(error) {
// file is now uploaded and post.file is populated e.g.:
// post.file.url
})
})
.get(function(req, res){
//get a list of all files goes here
});
我完全希望我遗漏了一些明显的东西,但是 MEAN 堆栈编程对我来说是新的,并且我已经搜索了 stackoverflow 和整个网络以寻找更多示例或任何可以暗示我遗漏了什么的东西。请帮忙!
最佳答案
首先,您应该设置您希望文件在 S3 上保存的位置路径,目前在该示例中它使用与原始文件相同的路径(可以是 /var/tmp/y7sday...
或 C:/Users/SomeGuy/Pictures/..
) 所以我们需要先解决这个问题。
在我的代码中,我使用与他们提供的文件相同的名称,在生产中,您可能希望按日期对这些文件进行排序并向它们添加一个随机 uuid。 full example
FileSchema.plugin(crate, {
storage: new S3({
key: process.env.KEY,
secret: process.env.SECRET,
bucket: process.env.BUCKET,
acl: 'public-read', // defaults to public-read
region: 'eu-west-1', // defaults to us-standard
path: function(attachment) { // where the file is stored in the bucket - defaults to this function
return '/' + attachment.name
}
}),
fields: {
file: {}
}
});
接下来,在您的 API 端点中,您希望在正文中包含任何表单信息并将这些信息添加到对象中,这些将位于 req.body
部分。
这里要注意的最重要的事情是我已经将附件设置为 file
,这需要与您在 mongoose 模式中声明的字段相匹配,否则它将消失。
接下来将 req.files.file
作为第二个参数。 full example
exports.create = function (req, res) {
var file = new File();
file.title = req.body.title;
file.description = req.body.description;
file.attach('file', req.files.file, function (error) {
if (error) {
return res.send(error);
} else {
return res.send(file);
}
});
};
我已经将我的作品上传到 GitHub , 所以请克隆它并尝试一下。
您需要做的就是POST到/file/
{
"description": "My Description",
"title": "My Title",
"file": {
"url": "https://mysecretbucket.s3-eu-west-1.amazonaws.com/bb4bf9f69bf41ab478824d80a338beb6.png",
"type": "image/png",
"name": "bb4bf9f69bf41ab478824d80a338beb6.png",
"size": 8912
},
"_id": "553e8ed8282cc30000000001"
}
确保将表单中的字段设置为 file
,如下图所示
关于node.js - 如何通过 Express Route 使用 Mongoose-Crate 存储文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29859490/
您好,如果没有身份验证,我尝试保护路由,但它不起作用 警告:您不应在同一个 route 使用路线组件和路线渲染;路线渲染将被忽略 App.js import React, { Fragment,
几乎我见过的每个示例,app.js 都使用 require 和路径 ./。我想知道为什么我们不能只使用 /。例如,为什么我们不能执行以下操作。 var express = require('expre
如果router.all()只匹配所有方法,是否可以用router.use()代替?router.use() 和 router.route() 之间有什么区别? 最佳答案 router.all:这意味
在我的 Symfony应用程序我想根据当前用户的文化选择 routing.yml; 'en' => routing.en.yml 'no' => routing.no.yml 等等。 关于如何做到这一
我正在使用 React Router v6 并为我的应用程序创建私有(private)路由。 在文件 PrivateRoute.js 中,我有代码 import React from 'react';
这个问题在这里已经有了答案: Error "Error: A is only ever to be used as the child of element" (14 个回答) Error: [P
我正在关注 Ember Quick Start guide (ember-cli v 2.11),并按照说明构建玩具应用程序。在“定义路线”部分,说明说要运行命令 ember generate rou
这个问题在这里已经有了答案: ReactJS: [Home] is not a component. All component children of must be a or (5 个答
这个问题在这里已经有了答案: ReactJS: [Home] is not a component. All component children of must be a or (5 个答
单击“开始测验”按钮时,我试图导航到“/quiz”。 但是,当我编译我的代码时,我在网站应用程序上收到以下错误:[Home] is not a component. All component ch
我有一点咸菜。我正在使用路由保护(实现 CanActivate 接口(interface))来检查用户是否被授予访问特定路由的权限: const routes: Routes = [ {
我正在尝试测试我的应用程序正在使用的引擎内部的 Controller 。规范不在引擎中,而是在应用程序本身中(我试图在引擎中进行测试,但也遇到了问题)。 我的引擎有以下 routes.rb: Revi
我是Remix的新手,我正在尝试使用V2路由方法实现特定的路由解决方案。。这是一个人为的例子,不是真实的东西,只是为了说明这一点。。我想要的URL方案是:。我从以下几条路线开始:。App/routes
我正在尝试从 rails 2.3.x(使用 subdomain_routes 插件)转换一些子域路由,如下所示: map.subdomain :biz do |biz| biz.resources
我将 Symfony 的 3.1 路由组件用作独立组件。 我想调试路由。 据此: http://symfony.com/doc/current/routing/debug.html 这是通过运行以下命
我是 Sparkjava 的新手,总体上喜欢它。但是,是否必须在 main 方法中定义新的路由/端点?对于任何重要的 Web 应用程序,这将导致一个非常长的 main 方法,或者我需要有多个 main
我刚刚使用node.js 和express.js 开发了一个原型(prototype)。在这里,我使用了 Express 路由来对后端进行 CRUD。 server.js 文件: app.get('/
我不明白 Angular 4 中路由的一些基本概念。 index.html: 文件结构: - app |- app.routings.ts |- collections |-- collection
我在反应路线和理解合成路线方面遇到了一些困难。我尝试了一些代码,但不幸的是,它不能像预期的那样工作。“/”路径运行得很好,但是,当我尝试访问“/Child”时,它似乎不起作用。我认为包装器路由}/>可
我正在尝试使用 cakephp 3 实现 REST api。 为了给我的问题提供一个易于重现的示例,我从全新安装 cakephp 3.1.11 开始。 在 config/routes.php 中,我添
我是一名优秀的程序员,十分优秀!