From 9e2a313dfacd447e620ce797e8ef6bf6b998ced7 Mon Sep 17 00:00:00 2001 From: jinyaqiu Date: Wed, 20 Aug 2025 16:20:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AA=92=E4=BD=93=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 144546 -> 149841 bytes wake/Utils/MediaUtils.swift | 84 +++++++ wake/View/Components/Upload/MediaPicker.swift | 221 ++++++++++++++++++ .../Components/Upload/MediaUploader.swift | 138 +++++++++++ wake/View/Components/Upload/VideoPicker.swift | 88 +++++++ wake/View/Examples/MediaUpload.swift | 104 +++++++++ wake/WakeApp.swift | 2 +- 7 files changed, 636 insertions(+), 1 deletion(-) create mode 100644 wake/Utils/MediaUtils.swift create mode 100644 wake/View/Components/Upload/MediaPicker.swift create mode 100644 wake/View/Components/Upload/MediaUploader.swift create mode 100644 wake/View/Components/Upload/VideoPicker.swift create mode 100644 wake/View/Examples/MediaUpload.swift diff --git a/wake.xcodeproj/project.xcworkspace/xcuserdata/elliwood.xcuserdatad/UserInterfaceState.xcuserstate b/wake.xcodeproj/project.xcworkspace/xcuserdata/elliwood.xcuserdatad/UserInterfaceState.xcuserstate index 69ed377fa62d2dd1c80e00caf89edb9176fa5a79..c5ebc1ce8a8aa234dcfe3edf3a15763a1d9af66f 100644 GIT binary patch literal 149841 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 b)GaUFHTd6uez4vD{oDT+|Ns99mrni) -> Void) { + let asset = AVURLAsset(url: videoURL) + let assetImgGenerate = AVAssetImageGenerator(asset: asset) + assetImgGenerate.appliesPreferredTrackTransform = true + + // 获取视频时长 + let duration = asset.duration + let durationTime = CMTimeGetSeconds(duration) + + // 如果视频时长小于等于0,返回错误 + guard durationTime > 0 else { + let error = NSError(domain: "com.yourapp.media", code: -1, userInfo: [NSLocalizedDescriptionKey: "Invalid video duration"]) + completion(.failure(error)) + return + } + + // 获取第一帧(时间点为0) + let time = CMTime(seconds: 0, preferredTimescale: 600) + + // 生成图片 + assetImgGenerate.generateCGImagesAsynchronously(forTimes: [NSValue(time: time)]) { (_, cgImage, _, result, error) in + if let error = error { + logger.error("Failed to generate image: \(error.localizedDescription)") + DispatchQueue.main.async { + completion(.failure(error)) + } + return + } + + guard result == .succeeded, let cgImage = cgImage else { + let error = NSError(domain: "com.yourapp.media", code: -2, userInfo: [NSLocalizedDescriptionKey: "Failed to generate image from video"]) + logger.error("Failed to generate image: \(error.localizedDescription)") + DispatchQueue.main.async { + completion(.failure(error)) + } + return + } + + // 创建UIImage并返回 + let image = UIImage(cgImage: cgImage) + DispatchQueue.main.async { + completion(.success(image)) + } + } + } + + /// 从视频数据中提取第一帧 + /// - Parameters: + /// - videoData: 视频数据 + /// - completion: 完成回调,返回UIImage或错误 + static func extractFirstFrame(from videoData: Data, completion: @escaping (Result) -> Void) { + // 创建临时文件URL + let tempDirectoryURL = FileManager.default.temporaryDirectory + let fileName = "tempVideo_\(UUID().uuidString).mov" + let fileURL = tempDirectoryURL.appendingPathComponent(fileName) + + do { + // 将数据写入临时文件 + try videoData.write(to: fileURL) + + // 调用URL版本的方法 + extractFirstFrame(from: fileURL) { result in + // 清理临时文件 + try? FileManager.default.removeItem(at: fileURL) + completion(result) + } + } catch { + logger.error("Failed to write video data to temporary file: \(error.localizedDescription)") + completion(.failure(error)) + } + } +} diff --git a/wake/View/Components/Upload/MediaPicker.swift b/wake/View/Components/Upload/MediaPicker.swift new file mode 100644 index 0000000..ec671a5 --- /dev/null +++ b/wake/View/Components/Upload/MediaPicker.swift @@ -0,0 +1,221 @@ +import SwiftUI +import PhotosUI +import AVFoundation +import os.log + +/// 媒体类型 +enum MediaType: Equatable { + case image(UIImage) + case video(URL, UIImage?) // URL 是视频地址,UIImage 是视频缩略图 + + var thumbnail: UIImage? { + switch self { + case .image(let image): + return image + case .video(_, let thumbnail): + return thumbnail + } + } + + var isVideo: Bool { + if case .video = self { + return true + } + return false + } + + static func == (lhs: MediaType, rhs: MediaType) -> Bool { + switch (lhs, rhs) { + case (.image(let lhsImage), .image(let rhsImage)): + return lhsImage.pngData() == rhsImage.pngData() + case (.video(let lhsURL, _), .video(let rhsURL, _)): + return lhsURL == rhsURL + default: + return false + } + } +} + +struct MediaPicker: UIViewControllerRepresentable { + @Binding var selectedMedia: [MediaType] + var selectionLimit: Int + var onDismiss: (() -> Void)? + + func makeUIViewController(context: Context) -> PHPickerViewController { + var configuration = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared()) + + // 配置支持图片和视频 + configuration.filter = .any(of: [.videos, .images]) + configuration.selectionLimit = selectionLimit + configuration.preferredAssetRepresentationMode = .current + + let picker = PHPickerViewController(configuration: configuration) + picker.delegate = context.coordinator + return picker + } + + func updateUIViewController(_ uiViewController: PHPickerViewController, context: Context) {} + + func makeCoordinator() -> Coordinator { + Coordinator(self) + } + + class Coordinator: NSObject, PHPickerViewControllerDelegate { + let parent: MediaPicker + private let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.example.app", category: "MediaPicker") + private var processedCount = 0 + private var totalToProcess = 0 + private var tempMedia: [MediaType] = [] + + init(_ parent: MediaPicker) { + self.parent = parent + } + + func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { + guard !results.isEmpty else { + parent.onDismiss?() + return + } + + processedCount = 0 + totalToProcess = results.count + tempMedia = [] + + for result in results { + let itemProvider = result.itemProvider + + if itemProvider.hasItemConformingToTypeIdentifier(UTType.image.identifier) { + processImage(itemProvider: itemProvider) { [weak self] media in + self?.handleProcessedMedia(media) + } + } else if itemProvider.hasItemConformingToTypeIdentifier(UTType.movie.identifier) { + processVideo(itemProvider: itemProvider) { [weak self] media in + self?.handleProcessedMedia(media) + } + } else { + processedCount += 1 + checkCompletion() + } + } + } + + private func processImage(itemProvider: NSItemProvider, completion: @escaping (MediaType?) -> Void) { + itemProvider.loadObject(ofClass: UIImage.self) { (object, error) in + if let image = object as? UIImage { + completion(.image(image)) + } else { + self.logger.error("Failed to load image: \(error?.localizedDescription ?? "Unknown error")") + completion(nil) + } + } + } + + private func processVideo(itemProvider: NSItemProvider, completion: @escaping (MediaType?) -> Void) { + itemProvider.loadFileRepresentation(forTypeIdentifier: UTType.movie.identifier) { url, error in + guard let videoURL = url, error == nil else { + self.logger.error("Failed to load video: \(error?.localizedDescription ?? "Unknown error")") + completion(nil) + return + } + + // 创建临时文件URL + let tempDirectory = FileManager.default.temporaryDirectory + let targetURL = tempDirectory.appendingPathComponent("\(UUID().uuidString).\(videoURL.pathExtension)") + + do { + // 将视频复制到临时目录 + if FileManager.default.fileExists(atPath: targetURL.path) { + try FileManager.default.removeItem(at: targetURL) + } + try FileManager.default.copyItem(at: videoURL, to: targetURL) + + // 提取视频缩略图 + MediaUtils.extractFirstFrame(from: targetURL) { result in + switch result { + case .success(let thumbnail): + completion(.video(targetURL, thumbnail)) + case .failure(let error): + self.logger.error("Failed to extract video thumbnail: \(error.localizedDescription)") + // 即使缩略图提取失败,也继续处理视频 + completion(.video(targetURL, nil)) + } + } + } catch { + self.logger.error("Failed to copy video file: \(error.localizedDescription)") + completion(nil) + } + } + } + + private func handleProcessedMedia(_ media: MediaType?) { + if let media = media { + DispatchQueue.main.async { [weak self] in + self?.tempMedia.append(media) + self?.checkCompletion() + } + } else { + processedCount += 1 + checkCompletion() + } + } + + private func checkCompletion() { + processedCount += 1 + + if processedCount >= totalToProcess { + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + if !self.tempMedia.isEmpty { + self.parent.selectedMedia = self.tempMedia + } + self.parent.onDismiss?() + } + } + } + } +} + +// MARK: - 预览辅助视图 +struct MediaThumbnailView: View { + let media: MediaType + let onDelete: (() -> Void)? + + var body: some View { + ZStack(alignment: .topTrailing) { + // 显示缩略图 + if let thumbnail = media.thumbnail { + Image(uiImage: thumbnail) + .resizable() + .scaledToFill() + .frame(width: 80, height: 80) + .clipped() + .cornerRadius(8) + } else { + Color.gray + .frame(width: 80, height: 80) + .cornerRadius(8) + } + + // 视频标识 + if media.isVideo { + Image(systemName: "video.fill") + .foregroundColor(.white) + .padding(4) + .background(Color.black.opacity(0.6)) + .clipShape(Circle()) + .padding(4) + } + + // 删除按钮 + if let onDelete = onDelete { + Button(action: onDelete) { + Image(systemName: "xmark.circle.fill") + .foregroundColor(.red) + .background(Color.white) + .clipShape(Circle()) + } + .offset(x: 8, y: -8) + } + } + } +} diff --git a/wake/View/Components/Upload/MediaUploader.swift b/wake/View/Components/Upload/MediaUploader.swift new file mode 100644 index 0000000..eb922b6 --- /dev/null +++ b/wake/View/Components/Upload/MediaUploader.swift @@ -0,0 +1,138 @@ +import SwiftUI +import os.log + +class MediaUploader: ObservableObject { + @Published var selectedMedia: [MediaType] = [] + @Published private(set) var isUploading = false + @Published private(set) var uploadProgress: [Int: Double] = [:] // 跟踪每个上传任务的进度 + @Published var showError = false + @Published private(set) var errorMessage = "" + + @Published var showMediaPicker = false + let maxSelection: Int + var onUploadComplete: ([(MediaType, URL)]?) -> Void + var uploadFunction: (MediaType, @escaping (Double) -> Void) async throws -> URL + + private let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.example.app", category: "MediaUploader") + + init(maxSelection: Int, + onUploadComplete: @escaping ([(MediaType, URL)]?) -> Void, + uploadFunction: @escaping (MediaType, @escaping (Double) -> Void) async throws -> URL) { + self.maxSelection = maxSelection + self.onUploadComplete = onUploadComplete + self.uploadFunction = uploadFunction + } + + // 显示媒体选择器 + func showPicker() { + DispatchQueue.main.async { [weak self] in + self?.showMediaPicker = true + } + } + + // 公开的方法供外部调用 + func startUpload() async -> [(MediaType, URL)]? { + guard !selectedMedia.isEmpty else { return nil } + + isUploading = true + uploadProgress.removeAll() + + do { + var uploadedResults: [(MediaType, URL)] = [] + + for (index, media) in selectedMedia.enumerated() { + let url = try await uploadFunction(media) { [weak self] progress in + DispatchQueue.main.async { + self?.uploadProgress[index] = progress + } + } + uploadedResults.append((media, url)) + } + + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + self.isUploading = false + self.onUploadComplete(uploadedResults) + self.selectedMedia.removeAll() + } + + return uploadedResults + } catch { + logger.error("上传失败: \(error.localizedDescription)") + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + self.errorMessage = "上传失败: \(error.localizedDescription)" + self.showError = true + self.isUploading = false + } + return nil + } + } +} + +struct MediaUploaderView: View { + @ObservedObject var mediaUploader: MediaUploader + + var body: some View { + VStack(alignment: .leading, spacing: 16) { + // 显示已选媒体数量 + if !mediaUploader.selectedMedia.isEmpty { + Text("已选择 \(mediaUploader.selectedMedia.count) 个文件") + .foregroundColor(.secondary) + } + } + .padding() + .background(Color(.systemBackground)) + .cornerRadius(12) + .shadow(radius: 2) + .fullScreenCover(isPresented: $mediaUploader.showMediaPicker) { + MediaPicker( + selectedMedia: $mediaUploader.selectedMedia, + selectionLimit: mediaUploader.maxSelection + ) { + mediaUploader.showMediaPicker = false + } + } + .alert("错误", isPresented: $mediaUploader.showError) { + Button("确定", role: .cancel) {} + } message: { + Text(mediaUploader.errorMessage) + } + } +} + +// MARK: - 预览 +struct MediaUploader_Previews: PreviewProvider { + static var previews: some View { + Group { + MediaUploaderView( + mediaUploader: MediaUploader( + maxSelection: 5, + onUploadComplete: { _ in }, + uploadFunction: { _, _ in + // 模拟上传 + try await Task.sleep(nanoseconds: 1_000_000_000) + return URL(string: "https://example.com/uploaded")! + } + ) + ) + .padding() + .previewLayout(.sizeThatFits) + + MediaUploaderView( + mediaUploader: MediaUploader( + maxSelection: 5, + onUploadComplete: { _ in }, + uploadFunction: { _, _ in + // 模拟上传 + try await Task.sleep(nanoseconds: 1_000_000_000) + return URL(string: "https://example.com/uploaded")! + } + ) + ) + .padding() + .previewLayout(.sizeThatFits) + .preferredColorScheme(.dark) + } + } +} diff --git a/wake/View/Components/Upload/VideoPicker.swift b/wake/View/Components/Upload/VideoPicker.swift new file mode 100644 index 0000000..b50aa4f --- /dev/null +++ b/wake/View/Components/Upload/VideoPicker.swift @@ -0,0 +1,88 @@ +import SwiftUI +import PhotosUI +import AVFoundation +import os.log + +struct VideoPicker: UIViewControllerRepresentable { + @Binding var selectedVideoURL: URL? + @Binding var thumbnailImage: UIImage? + var onDismiss: (() -> Void)? + + func makeUIViewController(context: Context) -> PHPickerViewController { + var configuration = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared()) + configuration.filter = .videos + configuration.selectionLimit = 1 + configuration.preferredAssetRepresentationMode = .current + + let picker = PHPickerViewController(configuration: configuration) + picker.delegate = context.coordinator + return picker + } + + func updateUIViewController(_ uiViewController: PHPickerViewController, context: Context) {} + + func makeCoordinator() -> Coordinator { + Coordinator(self) + } + + class Coordinator: NSObject, PHPickerViewControllerDelegate { + let parent: VideoPicker + private let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.example.app", category: "VideoPicker") + + init(_ parent: VideoPicker) { + self.parent = parent + } + + func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { + guard let result = results.first else { + parent.onDismiss?() + return + } + + // 获取视频URL + result.itemProvider.loadFileRepresentation(forTypeIdentifier: UTType.movie.identifier) { [weak self] url, error in + guard let self = self, let videoURL = url, error == nil else { + self?.logger.error("Failed to load video: \(error?.localizedDescription ?? "Unknown error")") + DispatchQueue.main.async { + self?.parent.onDismiss?() + } + return + } + + // 创建临时文件URL + let tempDirectory = FileManager.default.temporaryDirectory + let targetURL = tempDirectory.appendingPathComponent("\(UUID().uuidString).\(videoURL.pathExtension)") + + do { + // 将视频复制到临时目录 + if FileManager.default.fileExists(atPath: targetURL.path) { + try FileManager.default.removeItem(at: targetURL) + } + try FileManager.default.copyItem(at: videoURL, to: targetURL) + + // 提取视频首帧 + MediaUtils.extractFirstFrame(from: targetURL) { [weak self] result in + switch result { + case .success(let image): + DispatchQueue.main.async { + self?.parent.thumbnailImage = image + self?.parent.selectedVideoURL = targetURL + self?.parent.onDismiss?() + } + case .failure(let error): + self?.logger.error("Failed to extract video thumbnail: \(error.localizedDescription)") + DispatchQueue.main.async { + self?.parent.onDismiss?() + } + } + } + } catch { + self.logger.error("Failed to copy video file: \(error.localizedDescription)") + DispatchQueue.main.async { + self.parent.onDismiss?() + } + } + } + } + } +} diff --git a/wake/View/Examples/MediaUpload.swift b/wake/View/Examples/MediaUpload.swift new file mode 100644 index 0000000..6db94e5 --- /dev/null +++ b/wake/View/Examples/MediaUpload.swift @@ -0,0 +1,104 @@ +import SwiftUI +import os.log + +public struct ExampleView: View { + @StateObject private var mediaUploader = MediaUploader( + maxSelection: 5, + onUploadComplete: { _ in }, + uploadFunction: { media, progress in + // 模拟上传进度 + for i in 0...10 { + try await Task.sleep(nanoseconds: 100_000_000) // 0.1秒 + progress(Double(i) / 10.0) + } + + // 这里替换为您的实际上传逻辑 + switch media { + case .image(let image): + // 上传图片 + guard let url = URL(string: "https://example.com/images/\(UUID().uuidString).jpg") else { + throw NSError(domain: "com.example.app", code: -1, userInfo: [NSLocalizedDescriptionKey: "Invalid URL"]) + } + return url + case .video(let url, _): + // 上传视频 + guard let url = URL(string: "https://example.com/videos/\(UUID().uuidString).mp4") else { + throw NSError(domain: "com.example.app", code: -1, userInfo: [NSLocalizedDescriptionKey: "Invalid URL"]) + } + return url + } + } + ) + @State private var uploadedURLs: [URL] = [] + @EnvironmentObject private var authState: AuthState + + public init() {} + + public var body: some View { + NavigationView { + VStack { + // 添加媒体按钮 + Button(action: { + mediaUploader.showPicker() + }) { + HStack { + Image(systemName: "plus.circle.fill") + Text("添加媒体") + } + .frame(maxWidth: .infinity) + .padding() + .background(Color.blue) + .foregroundColor(.white) + .cornerRadius(8) + } + .padding(.horizontal) + + // 媒体上传组件 + MediaUploaderView(mediaUploader: mediaUploader) + .onChange(of: mediaUploader.selectedMedia) { newValue in + if !newValue.isEmpty { + Task { + if let results = await mediaUploader.startUpload() { + let urls = results.map { $0.1 } + uploadedURLs.append(contentsOf: urls) + } + } + } + } + + // 显示已上传的URL + List(uploadedURLs, id: \.self) { url in + Text(url.absoluteString) + .font(.caption) + .padding(.vertical, 4) + } + .listStyle(PlainListStyle()) + } + .navigationTitle("媒体上传示例") + } + } + + // 实际上传函数示例 + private func uploadMedia(_ media: MediaType, progress: @escaping (Double) -> Void) async throws -> URL { + // 模拟上传进度 + for i in 0...10 { + try await Task.sleep(nanoseconds: 100_000_000) // 0.1秒 + progress(Double(i) / 10.0) + } + + // 这里替换为您的实际上传逻辑 + switch media { + case .image(let image): + // 上传图片 + return URL(string: "https://example.com/images/\(UUID().uuidString).jpg")! + case .video(let url, _): + // 上传视频 + return URL(string: "https://example.com/videos/\(UUID().uuidString).mp4")! + } + } +} + +#Preview { + ExampleView() + .environmentObject(AuthState.shared) +} \ No newline at end of file diff --git a/wake/WakeApp.swift b/wake/WakeApp.swift index 13a58cf..98fd3b9 100644 --- a/wake/WakeApp.swift +++ b/wake/WakeApp.swift @@ -46,7 +46,7 @@ struct WakeApp: App { // 已登录:显示userInfo页面 // UserInfo() // .environmentObject(authState) - MultiImageUploadExampleView() + ExampleView() .environmentObject(authState) } else { // 未登录:显示登录界面