- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
抱歉我英语不好。
它适用于本地主机,但不适用于生产。 (使用 ZEIT NOW 部署)
这是上传.ts
import { NextApiRequest, NextApiResponse } from 'next'
import AWS from 'aws-sdk';
const formidable = require("formidable-serverless");
AWS.config.region = 'ap-northeast-2';
export const config = {
api: {
bodyParser: false,
}
}
export default async (req:NextApiRequest, res:NextApiResponse) => {
const data = await new Promise(function(resolve, reject) {
const form = formidable();
form.keepExtensions = true;
form.keepFilename = true;
form.parse(req, (err:any, fields:any, files:any) => {
const s3 = new AWS.S3({
accessKeyId: process.env.AWS_ACCESS_KEY_CODE,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY_CODE
});
const params = {
Bucket: 'mybucket',
Key: `folder/${files.file.name}`,
ACL: 'public-read',
Body: require('fs').createReadStream(files.file.path);
};
s3.upload(params, (err:any, data:any) => {
resolve({ err, data });
});
if (err) return reject(err);
resolve({ fields, files });
});
});
}
我想我不能在无服务器中使用“fs”。但我找不到其他上传方式。帮帮我谢谢!
最佳答案
以下是如何使用 Next.js 将图像上传到 S3 的示例。
// pages/api/upload-url.js
import aws from 'aws-sdk';
export default async function handler(req, res) {
aws.config.update({
accessKeyId: process.env.ACCESS_KEY,
secretAccessKey: process.env.SECRET_KEY,
region: process.env.REGION,
signatureVersion: 'v4',
});
const s3 = new aws.S3();
const post = await s3.createPresignedPost({
Bucket: process.env.BUCKET_NAME,
Fields: {
key: req.query.file,
},
Expires: 60, // seconds
Conditions: [
['content-length-range', 0, 1048576], // up to 1 MB
],
});
res.status(200).json(post);
}
这利用了预先签名的 POST,这有助于将计算从您的服务器卸载到 AWS。然后,您可以在前端调用此 URL 来发送文件。
export default function Upload() {
const uploadPhoto = async (e) => {
const file = e.target.files[0];
const filename = encodeURIComponent(file.name);
const res = await fetch(`/api/upload-url?file=${filename}`);
const { url, fields } = await res.json();
const formData = new FormData();
Object.entries({ ...fields, file }).forEach(([key, value]) => {
formData.append(key, value);
});
const upload = await fetch(url, {
method: 'POST',
body: formData,
});
if (upload.ok) {
console.log('Uploaded successfully!');
} else {
console.error('Upload failed.');
}
};
return (
<>
<p>Upload a .png or .jpg image (max 1MB).</p>
<input
onChange={uploadPhoto}
type="file"
accept="image/png, image/jpeg"
/>
</>
);
}
https://github.com/leerob/nextjs-aws-s3
关于amazon-s3 - 如何使用 Next JS 和 Zeit Now 和强大的无服务器将文件上传到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62845793/
Stackoverflow JS Genius的! 我当前的项目有一个问题,它正在使用 Node 的HTTP createServer,并使用Formidable来解析主体数据。 请参阅下面的代码。
我正在尝试将文件上传到我的 NodeJS 服务器。我目前收到错误: 错误:错误的内容类型 header ,未知的内容类型:image/jpeg “image/jpeg”是有效的 MIME 类型,为什么
我有一个用作路由器的 Node.JS 服务器,可以向它发出 post 请求以上传文件,应该只允许 jpg/png/jpeg 扩展名我目前正在做的是: var form = new formidable
我正在使用https://github.com/felixge/node-formidable用于使用express上传文件。 虽然它工作得很好,但有一个问题:我有一个包含 9 个 type="fil
Haskell 的类型推理引擎比 Scala 的类型推理引擎强大得多。在 Haskell 中,我很少需要显式编写类型,而在 Scala 中,类型只能在表达式中推断,而不能在方法定义中推断。 例如,请参
我将 Superpowered 用于各种实时 FX,它们都非常简单。然而,音高变换是另一回事,我认为事实上是因为它基于时间拉伸(stretch)算法,当然必须处理随时间变化的输出,这比应用 EQ 或混
我正在使用mean stack 和formidable上传文件 表单具有 multipart/form-data 属性 exports.create = function(req, res) {
我正在尝试构建我的第一个 node.js 应用程序,但是,使用 node server.js 运行时,我收到以下错误消息: connect: multipart: use parser (multip
对于强大的 npm 包,当我使用 import * as formidable from "formidable" 时,我收到一条错误消息,指出 formidable({ multiples: tru
我注意到了 std::string str; str += 'b'; // works str.append('b'); // does not work str.append(1, 'b'); //
我有一个需要访问本地 FS 的 HTML/JS(YUI 框架)照片管理器。我应该将 HTML/JS 移动到 AIR,还是硬着头皮将其“移植”到 Flex AIR? 我知道营销说的是什么,但我想要真正的
我是一名优秀的程序员,十分优秀!