Nuxt 文件存储
在您的 Nuxt 应用中存储文件的简单解决方案。能够从前端上传文件并从后端接收它们,然后将文件保存在您的项目中。
功能
- 📁 从文件输入获取文件并使其准备好发送到后端
- ⚗️ 在后端序列化文件以便能够适当地使用它们
- 🖴 使用 Nitro 引擎将文件存储在 Nuxt 后端的指定位置
快速设置
- 将
nuxt-file-storage
依赖项添加到您的项目中
# Using pnpm
pnpm add -D nuxt-file-storage
# Using yarn
yarn add --dev nuxt-file-storage
# Using npm
npm install --save-dev nuxt-file-storage
- 将
nuxt-file-storage
添加到nuxt.config.ts
的modules
部分
export default defineNuxtConfig({
modules: ['nuxt-file-storage'],
})
就是这样!您现在可以在您的 Nuxt 应用中使用 Nuxt 存储 ✨
配置
您目前可以配置 nuxt-file-storage
模块的单个设置。这是配置接口
export default defineNuxtConfig({
modules: ['nuxt-file-storage'],
fileStorage: {
// enter the absolute path to the location of your storage
mount: '/home/$USR/development/nuxt-file-storage/server/files',
// {OR} use environment variables (recommended)
mount: process.env.mount
// you need to set the mount in your .env file at the root of your project
},
})
用法
在前端处理文件
您可以使用 Nuxt 存储从 <input>
标签获取文件
<template>
<input type="file" @input="handleFileInput" />
</template>
<script setup>
// handleFileInput can handle multiple files
const { handleFileInput, files } = useFileStorage()
</script>
files
返回一个包含文件的 ref 对象
handleFileInput
返回一个 promise,以防您需要检查文件输入是否已结束
这是一个使用文件将它们发送到后端的示例
<template>
<input type="file" @input="handleFileInput" />
<button @click="submit">submit</button>
</template>
<script setup>
const { handleFileInput, files } = useFileStorage()
const submit = async () => {
const response = await $fetch('/api/files', {
method: 'POST',
body: {
files: files.value
}
})
}
</script>
在后端处理文件
使用 Nitro 服务器引擎,我们将创建一个接收文件并将其存储在 userFiles
文件夹中的 api 路由
export default defineEventHandler(async (event) => {
const { files } = await readBody<{ files: File[] }>(event)
for ( const file of files ) {
await storeFileLocally(
file, // the file object
8, // you can add a name for the file or length of Unique ID that will be automatically generated!
'/userFiles' // the folder the file will be stored in
)
// {OR}
// Parses a data URL and returns an object with the binary data and the file extension.
const { binaryString, ext } = parseDataUrl(file.content)
}
return 'success!'
})
interface File {
name: string
content: string
}
就是这样!现在您可以从用户 ✨ 中存储任何文件到您的 Nuxt 项目中。
贡献
遇到问题?打开一个 新问题。如果它适合项目的范围,我将尽我所能包含所有请求的功能。
想添加一些功能?欢迎 PR!
- 克隆此存储库
- 安装依赖项
- 准备项目
- 运行开发服务器
git clone https://github.com/NyllRE/nuxt-file-storage && cd nuxt-file-storage
npm i
npm run dev:prepare
npm run dev