Просмотр исходного кода

Fixed duplicated filename on upload

Alex 3 лет назад
Родитель
Сommit
b74ad69288

+ 2 - 2
README.md

@@ -48,7 +48,8 @@ This project is under heavy development, there will be continous functions, feat
 
 # Features
 
-- Upload and view assets(videos/images).
+- Upload and view assets (videos/images).
+- Download asset to local device.
 - Multi-user supported.
 - Quick navigation with drag scroll bar.
 - Auto Backup.
@@ -58,7 +59,6 @@ This project is under heavy development, there will be continous functions, feat
 - Image Tagging/Classification based on ImageNet dataset
 - Object detection based on COCO SSD.
 - Search assets based on tags and exif data (lens, make, model, orientation)
-- Upload assets from your local computer/server using [immich cli tools](https://www.npmjs.com/package/immich)
 - [Optional] Reverse geocoding using Mapbox (Generous free-tier of 100,000 search/month)
 - Show asset's location information on map (OpenStreetMap).
 - Show curated places on the search page

BIN
mobile/web/favicon.png


BIN
mobile/web/icons/Icon-192.png


BIN
mobile/web/icons/Icon-512.png


BIN
mobile/web/icons/Icon-maskable-192.png


BIN
mobile/web/icons/Icon-maskable-512.png


+ 0 - 104
mobile/web/index.html

@@ -1,104 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <!--
-    If you are serving your web app in a path other than the root, change the
-    href value below to reflect the base path you are serving from.
-
-    The path provided below has to start and end with a slash "/" in order for
-    it to work correctly.
-
-    For more details:
-    * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
-
-    This is a placeholder for base href that will be replaced by the value of
-    the `--base-href` argument provided to `flutter build`.
-  -->
-  <base href="$FLUTTER_BASE_HREF">
-
-  <meta charset="UTF-8">
-  <meta content="IE=Edge" http-equiv="X-UA-Compatible">
-  <meta name="description" content="A new Flutter project.">
-
-  <!-- iOS meta tags & icons -->
-  <meta name="apple-mobile-web-app-capable" content="yes">
-  <meta name="apple-mobile-web-app-status-bar-style" content="black">
-  <meta name="apple-mobile-web-app-title" content="immich_mobile">
-  <link rel="apple-touch-icon" href="icons/Icon-192.png">
-
-  <!-- Favicon -->
-  <link rel="icon" type="image/png" href="favicon.png"/>
-
-  <title>immich_mobile</title>
-  <link rel="manifest" href="manifest.json">
-</head>
-<body>
-  <!-- This script installs service_worker.js to provide PWA functionality to
-       application. For more information, see:
-       https://developers.google.com/web/fundamentals/primers/service-workers -->
-  <script>
-    var serviceWorkerVersion = null;
-    var scriptLoaded = false;
-    function loadMainDartJs() {
-      if (scriptLoaded) {
-        return;
-      }
-      scriptLoaded = true;
-      var scriptTag = document.createElement('script');
-      scriptTag.src = 'main.dart.js';
-      scriptTag.type = 'application/javascript';
-      document.body.append(scriptTag);
-    }
-
-    if ('serviceWorker' in navigator) {
-      // Service workers are supported. Use them.
-      window.addEventListener('load', function () {
-        // Wait for registration to finish before dropping the <script> tag.
-        // Otherwise, the browser will load the script multiple times,
-        // potentially different versions.
-        var serviceWorkerUrl = 'flutter_service_worker.js?v=' + serviceWorkerVersion;
-        navigator.serviceWorker.register(serviceWorkerUrl)
-          .then((reg) => {
-            function waitForActivation(serviceWorker) {
-              serviceWorker.addEventListener('statechange', () => {
-                if (serviceWorker.state == 'activated') {
-                  console.log('Installed new service worker.');
-                  loadMainDartJs();
-                }
-              });
-            }
-            if (!reg.active && (reg.installing || reg.waiting)) {
-              // No active web worker and we have installed or are installing
-              // one for the first time. Simply wait for it to activate.
-              waitForActivation(reg.installing || reg.waiting);
-            } else if (!reg.active.scriptURL.endsWith(serviceWorkerVersion)) {
-              // When the app updates the serviceWorkerVersion changes, so we
-              // need to ask the service worker to update.
-              console.log('New service worker available.');
-              reg.update();
-              waitForActivation(reg.installing);
-            } else {
-              // Existing service worker is still good.
-              console.log('Loading app from service worker.');
-              loadMainDartJs();
-            }
-          });
-
-        // If service worker doesn't succeed in a reasonable amount of time,
-        // fallback to plaint <script> tag.
-        setTimeout(() => {
-          if (!scriptLoaded) {
-            console.warn(
-              'Failed to load app from service worker. Falling back to plain <script> tag.',
-            );
-            loadMainDartJs();
-          }
-        }, 4000);
-      });
-    } else {
-      // Service workers not supported. Just drop the <script> tag.
-      loadMainDartJs();
-    }
-  </script>
-</body>
-</html>

+ 0 - 35
mobile/web/manifest.json

@@ -1,35 +0,0 @@
-{
-    "name": "immich_mobile",
-    "short_name": "immich_mobile",
-    "start_url": ".",
-    "display": "standalone",
-    "background_color": "#0175C2",
-    "theme_color": "#0175C2",
-    "description": "A new Flutter project.",
-    "orientation": "portrait-primary",
-    "prefer_related_applications": false,
-    "icons": [
-        {
-            "src": "icons/Icon-192.png",
-            "sizes": "192x192",
-            "type": "image/png"
-        },
-        {
-            "src": "icons/Icon-512.png",
-            "sizes": "512x512",
-            "type": "image/png"
-        },
-        {
-            "src": "icons/Icon-maskable-192.png",
-            "sizes": "192x192",
-            "type": "image/png",
-            "purpose": "maskable"
-        },
-        {
-            "src": "icons/Icon-maskable-512.png",
-            "sizes": "512x512",
-            "type": "image/png",
-            "purpose": "maskable"
-        }
-    ]
-}

+ 12 - 8
server/src/config/multer-option.config.ts

@@ -5,10 +5,8 @@ import { diskStorage } from 'multer';
 import { extname } from 'path';
 import { Request } from 'express';
 import { APP_UPLOAD_LOCATION } from '../constants/upload_location.constant';
-
-export const multerConfig = {
-  dest: APP_UPLOAD_LOCATION,
-};
+import { randomUUID } from 'crypto';
+import { CreateAssetDto } from '../api-v1/asset/dto/create-asset.dto';
 
 export const multerOption: MulterOptions = {
   fileFilter: (req: Request, file: any, cb: any) => {
@@ -21,7 +19,11 @@ export const multerOption: MulterOptions = {
 
   storage: diskStorage({
     destination: (req: Request, file: Express.Multer.File, cb: any) => {
-      const uploadPath = multerConfig.dest;
+      const uploadPath = APP_UPLOAD_LOCATION;
+      const fileInfo = req.body as CreateAssetDto;
+
+      const yearInfo = new Date(fileInfo.createdAt).getFullYear();
+      const monthInfo = new Date(fileInfo.createdAt).getMonth();
 
       if (file.fieldname == 'assetData') {
         const originalUploadFolder = `${uploadPath}/${req.user['id']}/original/${req.body['deviceId']}`;
@@ -30,6 +32,7 @@ export const multerOption: MulterOptions = {
           mkdirSync(originalUploadFolder, { recursive: true });
         }
 
+        // Save original to disk
         cb(null, originalUploadFolder);
       } else if (file.fieldname == 'thumbnailData') {
         const thumbnailUploadFolder = `${uploadPath}/${req.user['id']}/thumb/${req.body['deviceId']}`;
@@ -38,17 +41,18 @@ export const multerOption: MulterOptions = {
           mkdirSync(thumbnailUploadFolder, { recursive: true });
         }
 
+        // Save thumbnail to disk
         cb(null, thumbnailUploadFolder);
       }
     },
 
     filename: (req: Request, file: Express.Multer.File, cb: any) => {
       // console.log(req, file);
-
+      const fileNameUUID = randomUUID();
       if (file.fieldname == 'assetData') {
-        cb(null, `${file.originalname.split('.')[0]}${req.body['fileExtension']}`);
+        cb(null, `${fileNameUUID}${req.body['fileExtension'].toLowerCase()}`);
       } else if (file.fieldname == 'thumbnailData') {
-        cb(null, `${file.originalname.split('.')[0]}.jpeg`);
+        cb(null, `${fileNameUUID}.jpeg`);
       }
     },
   }),