next.js server action 上传图片到七牛云
时间: 2024-09-19 19:03:31 浏览: 49
Next.js 的 `serverless` 动作(Server Actions)允许你在服务器端执行异步操作,比如文件上传。要将图片上传到七牛云,你需要使用 Next.js 结合一个七牛云 SDK,如 qiniu-nodejs-sdk。以下是一个简单的步骤指南:
1. 安装依赖:
```
npm install qiniu @qiniu/nodejs-sdk
```
2. 配置七牛云存储:
- 在七牛云控制台创建一个存储空间,并获取 Access Key 和 Secret Key。
- 创建一个 `.env` 文件或者通过 `next.config.js` 的 `publicRuntimeConfig` 对象来安全地存储这些密钥。
3. 编写 server action 函数:
```javascript
import Qiniu from 'qiniu';
async function uploadToQiniu(file) {
const client = new Qiniu({
// 使用你的 Access Key 和 Secret Key 替换这里
accessKey: process.env.QINIU_ACCESS_KEY,
secretKey: process.env.QINIO_SECRET_KEY,
bucket: 'your-bucket-name', // 存储空间名称
});
try {
const ret = await client.put(file.name, file.buffer, file.name);
return { url: ret.url }; // 返回上传后的图片 URL
} catch (err) {
console.error('Error uploading to Qiniu:', err);
throw err;
}
}
export default async (req, res) => {
if (!req.file) {
return res.status(400).json({ error: 'No file uploaded' });
}
try {
const result = await uploadToQiniu(req.file);
res.status(200).json(result);
} catch (error) {
res.status(500).json({ error: 'Failed to upload' });
}
};
```
4. 调用此函数:
在需要处理文件上传的地方,例如在 API 中,你可以通过 `req.file` 获取前端提交的文件数据,然后调用 `uploadToQiniu`。
记得始终对敏感信息进行加密存储,并在实际生产环境中配置合适的错误处理和日志记录。
阅读全文