@blocklet/uploader-server
Version:
blocklet upload server
102 lines (74 loc) • 2.44 kB
Markdown
# @blocklet/uploader-server
**@blocklet/uploader-server** is a package that integrates the **uppy** service to provide universal upload capability for blocklets. For more information about uppy, refer to the [official documentation](https://uppy.io/docs/quick-start/).
## Package Structure
The package is composed of both frontend and backend components. The backend code can be found in the `middlewares` folder.
## Development
### Install In Blocklet
```
# You can use npm / yarn
pnpm add @blocklet/uploader-server
```
### Install Dependencies
To install the required dependencies, run the following command:
```
pnpm i
```
### Build Packages
To build the packages, execute the following command:
```
pnpm build
```
### Build, Watch, and Run Development Server
For building, watching changes, and running the development server, use the following command:
```
pnpm run dev
```
## Backend Example
```javascript
import { initLocalStorageServer, initCompanion } from '@blocklet/uploader-server';
// init uploader server
const localStorageServer = initLocalStorageServer({
path: env.uploadDir,
express,
onUploadFinish: async (req, res, uploadMetadata) => {
const {
id: filename,
size,
metadata: { filename: originalname, filetype: mimetype },
} = uploadMetadata;
const obj = new URL(env.appUrl);
obj.protocol = req.get('x-forwarded-proto') || req.protocol;
obj.pathname = joinUrl(req.headers['x-path-prefix'] || '/', '/uploads', filename);
const doc = await Upload.insert({
mimetype,
originalname,
filename,
size,
remark: req.body.remark || '',
tags: (req.body.tags || '')
.split(',')
.map((x) => x.trim())
.filter(Boolean),
folderId: req.componentDid,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
createdBy: req.user.did,
updatedBy: req.user.did,
});
const resData = { url: obj.href, ...doc };
return resData;
},
});
router.use('/uploads', user, auth, ensureComponentDid, localStorageServer.handle);
// if you need to load file from remote
// companion
const companion = initCompanion({
path: env.uploadDir,
express,
providerOptions: env.providerOptions,
uploadUrls: [env.appUrl],
});
router.use('/companion', user, auth, ensureComponentDid, companion.handle);
```
## License
This package is licensed under the MIT license.