news 2026/8/18 13:31:37

Swift 技术 OSS上存图片

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Swift 技术 OSS上存图片

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

文章目录

  • 前言
  • 接口上存
    • Alamofire接口上存
    • AFN接口上存
    • URLSession接口上存
  • OSS-SDK上存

前言

如果公司跟我们说后台上存图片的方式是使用阿里云的OSS上存,我们是否需要用下面的方式来上存还是用阿里云的OSS-SDK上存,就看后台提供给我们的参数是怎么样的,曾经在某家公司工作过后台使用阿里云OSS开发,最终上存使用下面的方式上存图片成功,那么什么情况下使用阿里云提供给我们的OSS-SDK,解析看下面

接口上存

Alamofire接口上存

20240511在SwiftUI(某娱公司)的项目使用过,可以去找该项目的源码测试

pod'Alamofire','5.6.0'
import UIKit import Alamofire class base_network_alamofire:NSObject{staticlet `default`=base_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_closure<upload_image_model?,String?>){//压缩图片 可自定义let imageData:Data=image_data(from:image)let urlString=URL(string:url)!let httpHeaders=HTTPHeaders(["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 data=dataObj{iflet responseString=String(data:data,encoding:.utf8){print(responseString)}iflet model=try?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:Data=image_data(from:image)guard let url=URL(string:url)else{print("Invalid URL")return}var request=URLRequest(url:url)request.httpMethod="POST"let boundary=UUID().uuidString request.setValue("multipart/form-data; boundary=\(boundary)",forHTTPHeaderField:"Content-Type")var body=Data()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.httpBody=body 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 task=URLSession.shared.dataTask(with:request){data,response,erroriniflet error=error{result(nil,"Upload error: \(error)")return}iflet httpResponse=response as?HTTPURLResponse{result(nil,"Upload response status code: \(httpResponse.statusCode)")}iflet data=data{iflet dictionary=try?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文件的上传/下载的实现文章

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/18 13:29:17

感知元素工程:人工认知系统的入口层构建

感知元素工程&#xff1a;人工认知系统的入口层构建摘要作者&#xff1a;东塬一老翁技术支持&#xff1a;WSaiOS多模态智能技术研发工作室人工认知系统的根本挑战在于如何使人工个体不仅“接收”外部信息&#xff0c;而且能够“感知”世界。本文基于ICAI&#xff08;Individual…

作者头像 李华
网站建设 2026/8/18 13:28:34

【2014-04-22】使用XAMPP运行DVWA

[历史归档] 本文原发布于 cstriker1407.info 个人博客&#xff0c;内容为历史存档&#xff0c;仅供参考。 发布时间&#xff1a; 2014-04-22 &#xff5c; 标题&#xff1a;使用XAMPP运行DVWA &#xff5c; 分类&#xff1a; 操作系统 / 安全 &#xff5c; 标签&#xff…

作者头像 李华
网站建设 2026/8/18 13:27:42

读懂hcache直方图:histo模式如何可视化页缓存分布

读懂hcache直方图&#xff1a;histo模式如何可视化页缓存分布 【免费下载链接】hcache showing top X biggest cache files global 项目地址: https://gitcode.com/gh_mirrors/hc/hcache 排查 Linux 内存占用时&#xff0c;很多人都会遇到同一个困惑&#xff1a;free -h…

作者头像 李华