# Eigene Bereinigung hochgeladener Dateien und Erstellen von Abfragelinks

> Überprüfen Sie die Standard-Upload-Bereinigung, die automatische Löschung (falsch), die explizite Löschung und die Ersetzung der Href-Abfrage.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: de
Content-SHA256: fa4446d359b0ce9c9c7662ec01b49d29cbdcb3c4180a0146f4678cd170c1be33
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Hochgeladene temporäre Dateien verschwinden normalerweise, wenn die Anfrage freigegeben wird. `$.autoclear(false)` behält sie für Arbeiten, die über die Antwort hinausgehen: Ihre Anwendung muss sie dann verschieben oder entfernen. `$.clear()` plant die Entfernung entfernbarer Uploads und Leerzeichen `$.files`; Das Löschen der Festplatte erfolgt asynchron. Speichern Sie niemals beliebige, von einem Client bereitgestellte Pfade zum späteren Löschen.

Erstellen Sie in 0.0.19 Abfragelinks mit dem öffentlichen Hilfsprogramm `QUERIFY()` und einer Kopie der Abfrage, wie dieses Rezept zeigt. Es wird eine Abfragezeichenfolge erzeugt, keine Weiterleitung oder absolute URL.

Die unten aufgeführten Endpunkte für die Zuordnung gespeicherter Dateien und die Bereinigung sind lokal vorhanden. Eine Anwendung sollte bereichsbezogenen Besitz und dauerhaften Speicher nutzen, anstatt diese Endpunkte offenzulegen.

```js controllers/lifecycle.js
var paths = Object.create(null);
exports.install = function() {
	ROUTE('POST /upload/{mode}/ @upload <1mb', function($) {
		var file = $.files[0];
		if (!file) return $.invalid(400);
		var id = UID();
		paths[id] = file.path;
		if ($.params.mode === 'retain') $.autoclear(false);
		if ($.params.mode === 'clear') $.clear();
		$.json({ id: id, files: $.files.length });
	});
	ROUTE('GET /exists/{id}/', $ => $.json({ exists: !!paths[$.params.id] && F.Fs.existsSync(paths[$.params.id]) }));
	ROUTE('POST /cleanup/{id}/', function($) {
		var path = paths[$.params.id];
		if (path) { F.Fs.rmSync(path, { force: true }); delete paths[$.params.id]; }
		$.success();
	});
	ROUTE('GET /link/', function($) {
		var broken = false;
		try { $.href('page', '2'); } catch (e) { broken = e instanceof TypeError; }
		$.json({ broken: broken, link: QUERIFY('', Object.assign({}, $.query, { page: '2 & more' })) });
	});
};
```
