vapor-docs/docs/advanced/files.nl.md

98 lines
3.2 KiB
Markdown

# Bestanden
Vapor biedt een eenvoudige API voor het asynchroon lezen en schrijven van bestanden binnen route handlers. Deze API is gebouwd op NIO's [`NonBlockingFileIO`](https://swiftpackageindex.com/apple/swift-nio/main/documentation/nioposix/nonblockingfileio) type.
## Lezen
De primaire methode voor het lezen van een bestand levert chunks aan een callback handler terwijl ze van de schijf worden gelezen. Het te lezen bestand wordt gespecificeerd door zijn pad. Relatieve paden zoeken in de huidige werkdirectory van het proces.
```swift
// Leest asynchroon een bestand van schijf.
let readComplete: EventLoopFuture<Void> = req.fileio.readFile(at: "/path/to/file") { chunk in
print(chunk) // ByteBuffer
}
// Or
try await req.fileio.readFile(at: "/path/to/file") { chunk in
print(chunk) // ByteBuffer
}
// Lezen is voltooid
```
Bij gebruik van `EventLoopFuture` zal de geretourneerde future signaleren wanneer het lezen voltooid is of dat er een fout is opgetreden. Als `async`/`await` gebruikt wordt, dan zal zodra de `await` teruggekeerd is, het lezen voltooid zijn. Als er een fout is opgetreden zal er een foutmelding worden gegeven.
### Stream
De `streamFile` methode verpakt de stream in een `Response`. Deze methode stelt automatisch de juiste headers in, zoals `ETag` en `Content-Type`.
```swift
// Streamt asynchroon bestand als HTTP antwoord.
req.fileio.streamFile(at: "/path/to/file").map { res in
print(res) // Antwoord
}
// Of
let res = req.fileio.streamFile(at: "/path/to/file")
print(res)
```
Het resultaat kan direct door je route handler worden teruggegeven.
### Collect
De `collectFile` methode leest het opgegeven bestand in een buffer.
```swift
// Leest het bestand in een buffer.
req.fileio.collectFile(at: "/path/to/file").map { buffer in
print(buffer) // ByteBuffer
}
// of
let buffer = req.fileio.collectFile(at: "/path/to/file")
print(buffer)
```
!!! warning "Waarschuwing"
Deze methode vereist dat het hele bestand in één keer in het geheugen aanwezig is. Gebruik "chunked" of "streaming read" om het geheugengebruik te beperken.
## Schrijven
De `writeFile` methode ondersteunt het schrijven van een buffer naar een bestand.
```swift
// Schrijft buffer naar bestand.
req.fileio.writeFile(ByteBuffer(string: "Hello, world"), at: "/path/to/file")
```
De geretourneerde future zal signaleren wanneer het schrijven voltooid is of dat er een fout is opgetreden.
## Middleware
Voor meer informatie over het automatisch serveren van bestanden uit de _Public_ map van je project, zie [Middleware &rarr; FileMiddleware](middleware.md#file-middleware).
## Geavanceerd
Voor gevallen die Vapor's API niet ondersteunt, kunt u NIO's `NonBlockingFileIO` type direct gebruiken.
```swift
// Main thread.
let fileHandle = try await app.fileio.openFile(
path: "/path/to/file",
eventLoop: app.eventLoopGroup.next()
).get()
print(fileHandle)
// In een route handler.
let fileHandle = try await req.application.fileio.openFile(
path: "/path/to/file",
eventLoop: req.eventLoop)
print(fileHandle)
```
Ga voor meer informatie naar SwiftNIO's [API referentie](https://swiftpackageindex.com/apple/swift-nio/main/documentation/nioposix/nonblockingfileio).