1.0.4 • Published 1 year ago
@affinity-lab/sk-carbonite-attachment-server v1.0.4
@affinity-lab/sk-carbonite-attachment-server
It makes carbonite attachment files usable in SvelteKit projects.
Installation
npm i -s @affinity-lab/sk-carbonite-attachment-server
Using the FileUrlProvider
Set up the service
$lib/services/file-url-provider.ts
import {PUBLIC_FILE_URL_PREFIX, PUBLIC_IMG_URL_PREFIX} from "$env/static/public"; // you must import the file itself! import FileProvider from "@affinity-lab/sk-carbonite-attachment-server/src/file-provider";
export const fileUrlProvider = new FileProvider(PUBLIC_FILE_URL_PREFIX, PUBLIC_IMG_URL_PREFIX);
This service can make url-s for carbonite attachments.
```sveltehtml
<script lang="ts">
import fileUrlProvider from "$lib/services/file-url-provider.ts"
</script>
<img src={fileUrlProvider.file(file)}>
<!--
The file argument must be a carbonite attachment file:
type File = {
id: number,
name: string,
size: number,
title: null | string,
ver: string,
}
-->
This can also provide urls for thumbnail creation.
<script lang="ts">
import fileUrlProvider from "$lib/services/file-url-provider.ts"
</script>
<img src={fileUrlProvider.img(file, 64, 64).x1.png}>
<!--
arguments: file:File, width:number, height:number
you can use x1...x4 to set the resolution multiplier (default x1)
finally you need to get png, webp, jpg to retrieve the real url for the file
-->
Using the FileServer
Set up the service
$lib/services/file-server.ts
import {PRIVATE_ATTACHMENT_MAX_AGE, PRIVATE_IMG_MAX_AGE, PRIVATE_IMG_PATH} from "$env/static/private"; import FileServer from "@affinity-lab/sk-carbonite-attachment-server/src/file-server";
export const fileServer = new FileServer( PRIVATE_IMG_PATH, parseInt(PRIVATE_ATTACHMENT_MAX_AGE), parseInt(PRIVATE_IMG_MAX_AGE) );
### Add service to routes
> `src/routes/(files)/~fs/[...path]/+server.ts`
```ts
import type {RequestEvent} from "@sveltejs/kit";
import {fileServer} from "$lib/services/file-server";
export const GET = async (e: RequestEvent): Promise<Response> => fileServer.file(e.params.path, e);
src/routes/(files)/~img/[...path]/+server.ts
import type {RequestEvent} from "@sveltejs/kit"; import {fileServer} from "$lib/services/file-server"; export const GET = async (event: RequestEvent): Promise<Response> => fileServer.img(event.params.path, event);