ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

Swift 技术 OSS上存图片

Swift 技术 OSS上存图片 一直觉得自己写的不是技术而是情怀一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的希望我的这条路能让你们少走弯路希望我能帮你们抹去知识的蒙尘希望我能帮你们理清知识的脉络希望未来技术之巅上有你们也有我。文章目录前言接口上存Alamofire接口上存AFN接口上存URLSession接口上存OSS-SDK上存前言如果公司跟我们说后台上存图片的方式是使用阿里云的OSS上存我们是否需要用下面的方式来上存还是用阿里云的OSS-SDK上存就看后台提供给我们的参数是怎么样的曾经在某家公司工作过后台使用阿里云OSS开发最终上存使用下面的方式上存图片成功那么什么情况下使用阿里云提供给我们的OSS-SDK解析看下面接口上存Alamofire接口上存20240511在SwiftUI(某娱公司)的项目使用过,可以去找该项目的源码测试podAlamofire,5.6.0import UIKit import Alamofire class base_network_alamofire:NSObject{staticlet defaultbase_network_alamofire()/// 上存图片////// - Parameters:/// - url: 地址/// - image: 图片/// - params: 参数/// - image_name: 图片名字/// - progress_download: 进度回调/// - result: 成功回调funcupload_image(url:String,image:UIImage,params:[String:String],image_name:String,progress_download:escaping((_ progress:Double)-Void),result:escaping double_params_closureupload_image_model?,String?){//压缩图片 可自定义let imageData:Dataimage_data(from:image)let urlStringURL(string:url)!let httpHeadersHTTPHeaders([Content-Type:application/x-www-form-urlencoded,ver:Device.app_version(),device-id:Device.UUID(),model:Device.get_model(),lang:,sys_lan:Device.preferred_languages(),is_anchor:false,pkg:Device.bundle_identifier(),platform:iOS,platform_ver:Device.system_version(),device_lang:Device.preferred_languages(),device_country:Device.current_locale(),time_zone:Device.current_time_zone()])AF.upload(multipartFormData:{multiPartinforpinparams{multiPart.append(\(p.value).data(using:String.Encoding.utf8)!,withName:p.key)}multiPart.append(imageData,withName:file,fileName:image_name,mimeType:jpg)},to:urlString,method:.post).uploadProgress(queue:.main,closure:{progressinprogress_download(progress.fractionCompleted)}).responseDecodable(of:U17Root.self){responseindebugPrint(Response: \(response))debugPrint(comicListsL Response: \(response.value?.data?.returnData?.comicLists?[0].itemTitle ?? 1000))}.response{(response)inswitchresponse.result{case.success(let dataObj):iflet datadataObj{iflet responseStringString(data:data,encoding:.utf8){print(responseString)}iflet modeltry?JSONDecoder().decode(upload_image_model.self,from:data){result(model,nil)}else{result(nil,transform model fail)}}else{result(nil,transform data fail)}case.failure(_):result(nil,request fail)}}}}AFN接口上存当时在某娱工作的时候,没有用后台OSS写的接口在AFN封装使用过,其实对比Alamofire当时在拿货使用AFN上存图片的方法,实际都是跟拿货一样的,到时候接口拿货的AFN封装图片是上存方式和Alamofire(OSS)封装出来,应该没有问题URLSession接口上存20240511在SwiftUI(某娱公司)的项目使用过,可以去找该项目的源码测试funcupload_image(url:String,image:UIImage,params:[String:String],image_name:String,progress_download:escaping((_ progress:Double)-Void),result:escaping((Data?,String?)-())){let imageData:Dataimage_data(from:image)guard let urlURL(string:url)else{print(Invalid URL)return}var requestURLRequest(url:url)request.httpMethodPOSTlet boundaryUUID().uuidString request.setValue(multipart/form-data; boundary\(boundary),forHTTPHeaderField:Content-Type)var bodyData()for(key,value)inparams{body.append(--\(boundary)\r\n.data(using:.utf8)!)body.append(Content-Disposition: form-data; name\\(key)\\r\n\r\n.data(using:.utf8)!)body.append(\(value)\r\n.data(using:.utf8)!)}body.append(--\(boundary)\r\n.data(using:.utf8)!)body.append(Content-Disposition: form-data; name\file\; filename\\(image_name).jpg\\r\n.data(using:.utf8)!)body.append(Content-Type: image/jpg\r\n\r\n.data(using:.utf8)!)body.append(imageData)body.append(\r\n.data(using:.utf8)!)body.append(--\(boundary)--\r\n.data(using:.utf8)!)request.httpBodybody request.addValue(Device.app_version(),forHTTPHeaderField:ver)request.addValue(Device.UUID(),forHTTPHeaderField:device-id)request.addValue(Device.get_model(),forHTTPHeaderField:model)request.addValue(,forHTTPHeaderField:lang)request.addValue(Device.preferred_languages(),forHTTPHeaderField:sys_lan)request.addValue(false,forHTTPHeaderField:is_anchor)request.addValue(Device.bundle_identifier(),forHTTPHeaderField:pkg)request.addValue(iOS,forHTTPHeaderField:platform)request.addValue(Device.system_version(),forHTTPHeaderField:platform_ver)request.addValue(Device.preferred_languages(),forHTTPHeaderField:device_lang)request.addValue(Device.country_code(),forHTTPHeaderField:device_country)request.addValue(Device.current_time_zone(),forHTTPHeaderField:time_zone)let taskURLSession.shared.dataTask(with:request){data,response,erroriniflet errorerror{result(nil,Upload error: \(error))return}iflet httpResponseresponse as?HTTPURLResponse{result(nil,Upload response status code: \(httpResponse.statusCode))}iflet datadata{iflet dictionarytry?JSONSerialization.jsonObject(with:data,options:[])as?[String:Any]{print(dictionary)}result(data,nil)}}task.resume()}OSS-SDK上存下面的情况就是使用阿里云的OSS-SDK进行图片上存的如果后台提供了下面的4个参数过来给我们我们就需要下面的源码作为参考进行开发static NSString *const AccessKey ; static NSString *const SecretKey ; static NSString *const BucketName ; static NSString *const AliYunHost ;OC-OSS图片上存封装 - 实例代码iOS阿里云对象存储 OSS文件的上传/下载的实现文章
返回列表