change config
Some checks failed
Publier l'image Docker / test (push) Failing after 21s
Publier l'image Docker / publish (push) Has been skipped

This commit is contained in:
Nicolas 2026-09-19 14:59:16 +02:00
parent 9758fe75f9
commit 52ace91580
5 changed files with 10 additions and 6 deletions

View file

@ -16,7 +16,7 @@
"dir": "./uploads/videos",
"allowDirectories": true,
"allowedMimeTypes": ["video/*"],
"permissions": "0o666"
"permissions": "0666"
},
{ "name": "divers", "label": "Divers", "dir": "./uploads/divers" }
],

View file

@ -51,7 +51,7 @@
},
"permissions":{
"type":"string",
"default":"0o666",
"default":"0666",
"description": "Mode d'écriture sur le disque"
}
}

View file

@ -65,7 +65,7 @@ export interface DropTarget {
* Mode de permission d'écriture
* Par défaut 0o666
*/
permission: string;
permission: number;
}
/** Liste non vide de cibles de dépôt ; la première est la cible par défaut. */
@ -392,7 +392,7 @@ function parseTargets(value: unknown, defaultMimePolicy: MimePolicy): DropTarget
raw.allowedMimeTypes === undefined || raw.allowedMimeTypes === null
? defaultMimePolicy
: parseMimePolicy(raw.allowedMimeTypes, `targets[${String(index)}].allowedMimeTypes`),
permission: optionalString(raw.label, `targets[${String(index)}].permission`) ?? "0o666"
permission: parseInt(optionalString(raw.label, `targets[${String(index)}].permission`) ?? "0666",8)
};
};

View file

@ -33,12 +33,15 @@ export interface SaveFileParams {
/** Dossier de destination (résolu depuis la cible de dépôt choisie). */
targetDir: string;
maxFileSizeBytes: number;
/** Permission d'écriture */
permission:number;
/**
* Mode dossier : recrée `segments` sous `targetDir` et conserve `fileName` ;
* un fichier existant au même chemin est écrasé. Absent -> nom dérivé unique
* à la racine de `targetDir`.
*/
placement?: FilePlacement;
}
const MAX_BASE_LENGTH = 60;
@ -143,7 +146,7 @@ export async function resolveDestination(input: DestinationInput): Promise<Resol
* le fichier partiel est supprimé et `PayloadTooLargeError` est levée.
*/
export async function saveFile(params: SaveFileParams): Promise<StoredFile> {
const { source, originalName, mimeType, maxFileSizeBytes } = params;
const { source, originalName, mimeType, maxFileSizeBytes,permission } = params;
const { storedName, destination } = await resolveDestination(params);
let bytesWritten = 0;
@ -162,7 +165,7 @@ export async function saveFile(params: SaveFileParams): Promise<StoredFile> {
await pipeline(
source,
limiter,
createWriteStream(destination, { highWaterMark: WRITE_HIGH_WATER_MARK }),
createWriteStream(destination, { highWaterMark: WRITE_HIGH_WATER_MARK ,mode:permission}),
);
} catch (error) {
await rm(destination, { force: true });

View file

@ -94,6 +94,7 @@ export const uploadRoutes: FastifyPluginCallback = (app, _options, done) => {
targetDir: target.dir,
maxFileSizeBytes: app.appConfig.maxFileSizeBytes,
...(placement !== undefined ? { placement } : {}),
permission:target.permission
});
app.notifier.uploadCompleted({