我无法以任何方式编写上传图片的代码。
需要这样做:从iOS应用程序(SwiftUI)向后端发送请求,然后在后端检查文件格式(jpg、jpeg、png、heic),如果可以,我将图像上传到文件夹。
这是Vapor中的代码:
func addImage(req: Request) async throws -> HTTPStatus {
let user = try await getUserByToken(req: req)
guard let profile = try await Profile.query(on: req.db)
.filter(\.$user.$id == user.requireID())
.first()
else {
throw Abort(.badRequest, reason: "Profile not found")
}
let img = try req.content.decode(File.self)
let path = req.application.directory.publicDirectory + "/images/profiles/"
let fileName = try profile.requireID().uuidString + "." + (img.extension ?? "jpg")
try await req.fileio.writeFile(img.data, at: path + fileName)
return .ok
}
这是iOS中的代码:
func addImage(_ image: UIImage) async throws {
guard let url = URL(string: "\(url)/add-image"),
let imageData = image.jpegData(compressionQuality: 1)
else {
throw URLError(.badURL)
}
let profileImage = ProfileImage(filename: "filename.jpg", data: imageData)
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("Bearer \(tokenManager.getToken())", forHTTPHeaderField: "Authorization")
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
}
}
此代码仅下载 jpg 文件。我到底如何确定文件格式?
请帮我写两个方法:一个用于客户端(iOS),另一个用于服务器(Vapor)。
也许有一些用于处理文件格式的文档/库。
附注抱歉英语不好,不是我的母语:)
将二进制文件(如图像)发送到服务器时,您应该在上传时使用
Content-Type
标头。
常见
Content-Type
包括:
服务器端确认文件类型时,必须读取数据。我已经确认 @zdaecq 的 answer 使用
import Vapor
(而不是 Foundation
)工作。