Pamięć obiektowa (BLOB storage)
Pamięć obiektowa umożliwia aplikacjom monday code przechowywanie i zarządzanie dużymi, nieustrukturyzowanymi plikami, takimi jak obrazy, filmy, dokumenty i archiwa, bezpośrednio w monday.com.
Jest przeznaczona do przechowywania dużej liczby nieustrukturyzowanych plików oraz wykonywania rzadkich, intensywnych operacji odczytu i zapisu. monday code oferuje też pamięć klucz-wartość, która umożliwia szybki dostęp na podstawie klucza, oraz bazę danych dokumentów, która pozwala na zaawansowane wyszukiwanie ustrukturyzowanych lub częściowo ustrukturyzowanych danych.
Dzięki natywnej pamięci obiektowej opartej na Google Cloud Storage możesz przesyłać, pobierać i wyświetlać listę plików, usuwać je, pobierać metadane oraz generować podpisane adresy URL umożliwiające bezpośrednie przesyłanie plików z klienta. Wszystkie te funkcje są wbudowane w monday code, więc dane nie opuszczają infrastruktury monday. Zapewnia to bezpieczeństwo, prostotę i wydajność.
Pamięć obiektowa uzupełnia istniejące rozwiązania do przechowywania danych w monday code i jest przeznaczona specjalnie do przechowywania dużych, nieustrukturyzowanych plików.
Limity
Pamięć obiektowa podlega następującym limitom:
| Limit | Opis |
|---|---|
Przesyłanie po stronie serwera (uploadFile) |
SDK nie narzuca sztywnego limitu; praktyczne ograniczenia zależą od GCS i limitów środowiska wykonawczego |
| Przesyłanie za pomocą podpisanego adresu URL | Maksymalny rozmiar pliku: 500 MB |
| Ważność podpisanego adresu URL | Domyślnie: 15 minut Maksymalnie: 7 dni |
Inicjowanie
Maksymalny rozmiar pliku został zwiększony z 50 MB do 500 MB w wersji @mondaycom/apps-sdk v3.3.2 i nowszych.
Zainicjuj pamięć obiektową w kodzie backendu działającym w monday code:
import { ObjectStorage } from '@mondaycom/apps-sdk';
const objectStorage = new ObjectStorage();
Uwagi
- Wszystkie operacje są asynchroniczne i wymagają użycia
await. - Wszystkie odpowiedzi mają format
{ success: boolean, ... }.
Obsługiwane metody
Przesyłanie plików
Przesyła zawartość pliku z kodu po stronie serwera. Aby przesyłać pliki po stronie klienta (w przeglądarce lub aplikacji mobilnej), użyj podpisanego adresu URL.
const objectStorage = new ObjectStorage();
// Simple upload
const result = await objectStorage.uploadFile('user-avatar.jpg', fileBuffer);
// Upload with options
const result2 = await objectStorage.uploadFile('document.pdf', fileBuffer, {
contentType: 'application/pdf',
metadata: {
'uploaded-by': 'user123',
'department': 'sales'
}
});
Opcje
| Opcja | Typ | Opis | Wymagane |
|---|---|---|---|
| contentType | String | Typ MIME pliku. Domyślnie application/octet-stream. |
Nie |
| metadata | Object | Niestandardowe pary klucz-wartość do oznaczania i organizacji. | Nie |
Odpowiedź
Sukces
json
{ "success": true, "fileName": "user-avatar.jpg", "fileUrl": "gs://bucket/user-avatar.jpg" }
Niepowodzenie
json
{ "success": false, "error": "error message" }
Pobieranie plików
Pobiera zawartość pliku i jego typ MIME.
const result = await objectStorage.downloadFile('user-avatar.jpg');
if (result.success) {
const fileContent = result.content; // Buffer
const mimeType = result.contentType; // e.g. 'image/jpeg'
}
Odpowiedź
Sukces
Zwraca content (Buffer) i contentType.
Niepowodzenie
Zwraca komunikat o błędzie, na przykład File not found.
Usuwanie plików
Trwale usuwa plik z pamięci.
const result = await objectStorage.deleteFile('old-document.pdf');
Odpowiedź
Sukces
json
{ "success": true }
Niepowodzenie
json
{ "success": false, "error": "error message" }
Wyświetlanie listy plików
Wyświetla listę plików wraz z metadanymi. Obsługuje opcjonalne filtrowanie według prefiksu i stronicowanie.
// List all files (default: 100 files per page)
const result = await objectStorage.listFiles();
// Filter by prefix (logical folder)
const result2 = await objectStorage.listFiles({
prefix: 'users/123/'
});
// Pagination
const result3 = await objectStorage.listFiles({
maxResults: 50,
pageToken: 'next-page-token-from-previous-response'
});
Opcje
| Opcja | Typ | Opis | Wymagane |
|---|---|---|---|
| prefix | String | Filtruje wyniki według prefiksu ścieżki (folderu). | Nie |
| maxResults | Number | Liczba elementów na stronie. Domyślnie 100. | Nie |
| pageToken | String | Token używany do pobrania kolejnej strony wyników. | Nie |
Odpowiedź
Zwraca:
- Tablicę obiektów z informacjami o plikach:
name,size,contentType,lastModified,etagimetadata nextPageToken, jeśli dostępne są kolejne wyniki
Pobieranie informacji o pliku
Pobiera metadane pliku bez pobierania jego zawartości.
const result = await objectStorage.getFileInfo('report.pdf');
if (result.success) {
console.log(result.fileInfo.size); // File size in bytes
console.log(result.fileInfo.lastModified); // Date object
console.log(result.fileInfo.metadata); // Custom metadata
}
Odpowiedź
Sukces
Zwraca obiekt fileInfo.
Niepowodzenie
Zwraca { success: false, error: '...' }.
Generowanie podpisanych adresów URL do przesyłania plików
Tworzy tymczasowe adresy URL, które umożliwiają klientom (w przeglądarce lub aplikacji mobilnej) przesłanie określonego pliku bezpośrednio do pamięci w chmurze, bez przekierowywania żądania przez backend. Podpisany adres URL to tymczasowy, bezpieczny link wygenerowany i autoryzowany przez monday code, który przyznaje ograniczone uprawnienia do przesłania danego pliku.
Pamiętaj, że:
- Każda osoba mająca podpisany adres URL może przesyłać pliki do czasu jego wygaśnięcia
- Po wygaśnięciu adres URL przestaje działać
- Zalecamy tę metodę w przypadku dużych plików i przesyłania ich za pomocą przeglądarki
// Basic usage (15-minute expiration, 50 MB limit)
const result = await objectStorage.getPresignedUploadUrl('user-upload.jpg');
// With custom options
const result2 = await objectStorage.getPresignedUploadUrl('video.mp4', {
expires: new Date(Date.now() + 60 * 60 * 1000), // 1 hour
contentType: 'video/mp4',
maxFileSizeBytes: 50 * 1024 * 1024 // 50 MB
});
const uploadUrl = result.presignedUrl;
Opcje
| Opcja | Typ | Opis | Wymagane |
|---|---|---|---|
| expires | Date | Czas wygaśnięcia adresu URL. Domyślnie 15 minut od utworzenia. | Nie |
| contentType | String | Ogranicza przesyłanie do określonego typu MIME. | Nie |
| maxFileSizeBytes | Number | Maksymalny dozwolony rozmiar pliku. | Nie |
Błędy
Wszystkie operacje zwracają szczegółowe komunikaty o błędach, między innymi:
File not foundFailed to upload file: [reason]Failed to download file: [reason]Failed to list files: [reason]Failed to generate presigned upload URL: [reason]
Chcesz skalować swoją aplikację? Złóż tutaj.