From f40828484c30d9402b65c1357a407affbf73d5fb Mon Sep 17 00:00:00 2001 From: jinyaqiu Date: Tue, 19 Aug 2025 18:53:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=B4=A0=E6=9D=90=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 122469 -> 122452 bytes wake/View/Components/Upload/Avatar.swift | 121 +++++++++++++----- .../Components/Upload/MaterialService.swift | 62 +++++++++ 3 files changed, 149 insertions(+), 34 deletions(-) create mode 100644 wake/View/Components/Upload/MaterialService.swift diff --git a/wake.xcodeproj/project.xcworkspace/xcuserdata/elliwood.xcuserdatad/UserInterfaceState.xcuserstate b/wake.xcodeproj/project.xcworkspace/xcuserdata/elliwood.xcuserdatad/UserInterfaceState.xcuserstate index 8deb0a0f963332ff0d3ba10a31b2ca2de070da25..79e8ee05c88bc76d047d77714944190cd0cd28e4 100644 GIT binary patch delta 47195 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 Ef0TnzQ2+n{ delta 47723 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

@|L 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 a=) -> Void)? + var onImageUploaded: ((Result) -> Void)? // MARK: - Initialization @@ -30,7 +36,7 @@ struct PhotoPicker: UIViewControllerRepresentable { selectedImages: Binding<[UIImage]>, selectionLimit: Int = 1, filter: PHPickerFilter = .images, - onImageUploaded: ((Result) -> Void)? = nil + onImageUploaded: ((Result) -> Void)? = nil ) { self._selectedImages = selectedImages self.selectionLimit = selectionLimit @@ -75,66 +81,113 @@ struct PhotoPicker: UIViewControllerRepresentable { } /// 当用户完成图片选择时调用 - /// - Parameters: - /// - picker: 图片选择器实例 - /// - results: 用户选择的图片结果数组 func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { // 清空已选图片 parent.selectedImages.removeAll() - // 使用DispatchGroup管理多个异步图片加载任务 + // 使用DispatchGroup管理多个异步任务 let group = DispatchGroup() var loadedImages: [Int: UIImage] = [:] // 用于保持图片顺序的字典 + var uploadResults: [Int: (original: ImageUploaderGetID.UploadResult?, + compressed: ImageUploaderGetID.UploadResult?)] = [:] // 遍历所有选中的图片 for (index, result) in results.enumerated() { group.enter() // 进入组 - // 检查是否可以加载图片 if result.itemProvider.canLoadObject(ofClass: UIImage.self) { - // 异步加载图片 result.itemProvider.loadObject(ofClass: UIImage.self) { [weak self] (image, error) in - if let image = image as? UIImage { - // 将加载的图片存入字典,保持原始顺序 - loadedImages[index] = image + guard let self = self, let image = image as? UIImage else { + group.leave() + return + } + + // 1. 保存原始图片 + loadedImages[index] = image + + // 2. 压缩图片(质量压缩到50%) + guard let compressedImage = image.jpegData(compressionQuality: 0.5).flatMap(UIImage.init(data:)) else { + group.leave() + return + } + + // 3. 上传原图 + self.uploader.uploadImage(image) { [weak self] originalResult in + guard let self = self else { + group.leave() + return + } - // 上传图片 - self?.uploader.uploadImage(image) { result in - // 在主线程中调用上传完成回调 - DispatchQueue.main.async { - switch result { - case .success(let uploadResult): - print("✅ 上传成功!fileId: \(uploadResult.fileId)") - print("📂 文件信息:") - print(" - 文件名: \(uploadResult.fileName)") - print(" - 文件大小: \(uploadResult.fileSize) 字节") - print(" - 文件URL: \(uploadResult.fileUrl)") + switch originalResult { + case .success(let originalUploadResult): + // 4. 原图上传成功后上传压缩图 + self.uploader.uploadImage(compressedImage) { compressedResult in + defer { group.leave() } + + switch compressedResult { + case .success(let compressedUploadResult): + // 保存两个上传结果 + uploadResults[index] = (originalUploadResult, compressedUploadResult) + print("✅ 原图和压缩图上传成功!") + print("📂 原图信息:") + print(" - 文件ID: \(originalUploadResult.fileId)") + print(" - 文件大小: \(originalUploadResult.fileSize) 字节") + print("📦 压缩图信息:") + print(" - 文件ID: \(compressedUploadResult.fileId)") + print(" - 文件大小: \(compressedUploadResult.fileSize) 字节") - // 调用上传完成回调 - self?.parent.onImageUploaded?(.success(uploadResult)) + // 使用MaterialService上传文件信息到后端 + MaterialService.shared.uploadMaterialInfo( + fileId: originalUploadResult.fileId, + previewFileId: compressedUploadResult.fileId + ) { success, errorMessage in + if success { + print("✅ 文件信息上传成功 素材上传成功!!!!!") + } else if let errorMessage = errorMessage { + print("❌ 文件信息上传失败: \(errorMessage)") + } + } case .failure(let error): - print("❌ 上传失败: \(error.localizedDescription)") - // 调用上传完成回调,传递错误 - self?.parent.onImageUploaded?(.failure(error)) + print("❌ 压缩图上传失败: \(error.localizedDescription)") + uploadResults[index] = (originalUploadResult, nil) } } + + case .failure(let error): + print("❌ 原图上传失败: \(error.localizedDescription)") + group.leave() } } - group.leave() // 离开组 } } else { - group.leave() // 如果无法加载图片,也离开组 + group.leave() } } - // 所有图片加载完成后的处理 - group.notify(queue: .main) { - // 按原始顺序排序并更新图片数组 + // 所有上传任务完成后的处理 + group.notify(queue: .main) { [weak self] in + guard let self = self else { return } + + // 1. 更新选中的图片(只显示原图) let sortedImages = loadedImages.sorted { $0.key < $1.key }.map { $0.value } self.parent.selectedImages.append(contentsOf: sortedImages) - // 关闭图片选择器 + // 2. 检查是否所有上传都成功 + if let firstResult = uploadResults.first?.value, + let original = firstResult.original, + let compressed = firstResult.compressed { + // 3. 如果成功,返回上传结果 + let results = UploadResults(original: original, compressed: compressed) + self.parent.onImageUploaded?(.success(results)) + } else { + // 4. 如果失败,返回错误 + self.parent.onImageUploaded?(.failure(NSError(domain: "com.wake.upload", + code: -1, + userInfo: [NSLocalizedDescriptionKey: "上传过程中出现错误"]))) + } + + // 5. 关闭图片选择器 picker.dismiss(animated: true) } } @@ -155,7 +208,7 @@ struct AvatarUploader: View { let size: CGFloat /// 上传完成回调,返回上传结果或错误 - var onUploadComplete: ((Result) -> Void)? + var onUploadComplete: ((Result) -> Void)? // MARK: - State diff --git a/wake/View/Components/Upload/MaterialService.swift b/wake/View/Components/Upload/MaterialService.swift new file mode 100644 index 0000000..6453d5a --- /dev/null +++ b/wake/View/Components/Upload/MaterialService.swift @@ -0,0 +1,62 @@ +import Foundation + +/// 素材服务,处理与素材相关的网络请求 +class MaterialService { + + /// 单例实例 + static let shared = MaterialService() + + private init() {} + + /// 上传素材信息 + /// - Parameters: + /// - fileId: 原文件ID + /// - previewFileId: 预览文件ID + /// - completion: 完成回调,返回是否成功 + func uploadMaterialInfo(fileId: String, + previewFileId: String, + completion: @escaping (Bool, String?) -> Void) { + + let materialData: [[String: String]] = [[ + "file_id": fileId, + "preview_file_id": previewFileId + ]] + + guard let url = URL(string: "\(APIConfig.baseURL)/material") else { + completion(false, "无效的URL") + return + } + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.allHTTPHeaderFields = APIConfig.authHeaders + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + do { + request.httpBody = try JSONSerialization.data(withJSONObject: materialData) + + let task = URLSession.shared.dataTask(with: request) { data, response, error in + if let error = error { + completion(false, "上传失败: \(error.localizedDescription)") + return + } + + if let httpResponse = response as? HTTPURLResponse { + if (200...299).contains(httpResponse.statusCode) { + completion(true, nil) + } else { + let statusCode = httpResponse.statusCode + completion(false, "服务器返回错误状态码: \(statusCode)") + } + } else { + completion(false, "无效的服务器响应") + } + } + + task.resume() + + } catch { + completion(false, "请求数据序列化失败: \(error.localizedDescription)") + } + } +}