Загрузка картинки/изображения в Vapor 4 из iOS приложения, написанного на SwiftUI
Ребят, привет!
Никак не могу написать нормальный код для загрузки изображений.
Нужно сделать так: из приложения iOS (SwiftUI) отправляется запрос в бэкенд, написанный в Vapor, далее в бэкенде проверяется формат файла, и если ОК — загружаю картинку в папку.
Что написано на клиенте:
func addImage(_ image: UIImage) async throws {
guard let url = URL(string: "\(url)/add-image"),
let imageData = image.jpegData(compressionQuality: 1)
else {
throw URLError(.badURL)
}
// Вероятнее всего, в filename обрезается формат
let profileImage = ProfileImage(filename: "profile_id", data: imageData)
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
do {
request.httpBody = try JSONEncoder().encode(profileImage)
let (_, _) = try await URLSession.shared.data(for: request)
} catch {
throw error
}
}
Написано в Vapor:
func addImage(req: Request) async throws -> HTTPStatus {
let img = try req.content.decode(File.self)
if !["png", "jpeg", "jpg", "heic"].contains(img.extension?.lowercased()) {
throw Abort(.badRequest, reason: "Extension is not acceptable")
}
let path = req.application.directory.workingDirectory + "Public/Images/Profiles/"
let fileName = try profile.requireID().uuidString + "." + (img.extension ?? "jpg")
try await req.fileio.writeFile(img.data, at: path + fileName)
return .ok
}
По логике это ± написанные…
Помогите, пожалуйста, собрать два метода: один для клиента (iOS), а другой для бэкенда.
Возможно, есть какой-то док/библиотеки по загрузке файлов.