63 lines
2.1 KiB
Swift
63 lines
2.1 KiB
Swift
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)")
|
||
}
|
||
}
|
||
}
|