Swift中文件和图片上传处理

前言:基于Alamofire4.5网络框架开发的Swift项目中上传文件和图片代码参考。

上传文件

extension HttpRequestService {
    
    typealias UploadDoneBlock = (_ dict:[String : Any]) -> Void//成功block
    

    func uploadEcgFileWithGatherRecord(model :RecordModel, fileName : String, zipData : NSData, md5 : String, success:@escaping UploadDoneBlock, fail:@escaping FailedBlock) {
        let urlStr = HttpConfig.RequestUrlHeader.httpRequestUrlHeader + HttpConfig.RequestApi.uploadRecordApi
        
        //构造发送参数
        let parameters: Parameters = ["user_id":model.userId]
        //请求头
        let localToken = Tools.readFromUserDefault(key: localToken)!
        // 头部需要的内容包装
        let headers: HTTPHeaders = [ 
            "Accept": "application/json;charset=utf-8",
            "lang":"en-US",
            "token": localToken
        ]
        
        Alamofire.upload(multipartFormData: { (formData) in
            // "fname" 这里是服务器对应好的字段
            formData.append(zipData as Data, withName: "fname", fileName: fileName, mimeType:"application/zip")
            
            //拼接参数
            for (key, value) in parameters {
                let v = value as! String
                formData.append(v.data(using: String.Encoding.utf8)!, withName: key)
            }
// usingThreshold 指的是传入文件大小最大值
        }, usingThreshold: (50*1024*1024), to: URL.init(string: urlStr)!, method: HTTPMethod.post, headers: headers) { (encodingResult) in
            switch encodingResult {
            case .success(let upload, _, _):
                upload.responseJSON { response in
                    if let jsonValue = response.result.value {
                        let json = JSON(jsonValue)
                        print("上传记录json:\(json)")
                        let code = json["code"].int
                        
                        if code == HttpConfig.ErrorCode.HttpOK {
                            let dict = json["data"].dictionaryObject
                            success(dict!) 
                        } else {
                            fail("")
                        }
                    }
                }
            case .failure(_):
                self.networkErrorHint()  // 网络错误处理 
            }
        }
    }

图片上传

 typealias UploadUserIconSuccess = (_ dict:[String : Any]) -> Void//成功block
    
    func uploadUserIcon(fileName: String, imgData: NSData, success:@escaping UploadUserIconSuccess, fail:@escaping FailedBlock ) {
        let urlStr = HttpConfig.RequestUrlHeader.httpRequestUrlHeader + HttpConfig.RequestApi.uploadUserIconApi
        
     //请求头
        let localToken = Tools.readFromUserDefault(key: localToken)!
        // 头部需要的内容包装
        let headers: HTTPHeaders = [ 
            "Accept": "application/json;charset=utf-8",
            "lang":"en-US",
            "token": localToken
        ]

        Alamofire.upload(multipartFormData: { (formData) in
            // 参数解释:
            //withName:和后台服务器的name要一致 ;fileName:可以充分利用写成用户的id,但是格式要写对; mimeType:规定的,要上传其他格式可以自行百度查一下
            formData.append(imgData as Data, withName: "fname", fileName: fileName, mimeType:"image/jpeg")
            //如果需要上传多个文件,就多添加几个append,或则for-in语句进行循环处理
// formData.append(imgData as Data, withName: "fname", fileName: fileName, mimeType:"image/jpeg")
//  formData.append(imgData as Data, withName: "fname", fileName: fileName, mimeType:"image/jpeg")
        }, usingThreshold: (10*1024*1024), to: URL.init(string: urlStr)!, method: HTTPMethod.post, headers: headers) { (encodingResult) in
            switch encodingResult {
            case .success(let upload, _, _):
                upload.responseJSON { response in
                    if let jsonValue = response.result.value {
                        let json = JSON(jsonValue)
                        print("上传头像json:\(json)")
                        let code = json["code"].int
                        
                        if code == HttpConfig.ErrorCode.HttpOK {
                            let dict = json["data"].dictionaryObject
                            success(dict!)
                        } else {
                            let msg = json["msg"].string
                            HudToast.toastError(error: msg!)
                        }
                    }
                }
            case .failure(_):
                self.networkErrorHint()
            }
        }
    }

OC版本看之前的一篇文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,812评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 时间: 你好啊。 说来惭愧,直到最近才忽然意识到,你原来一直都在我身边,就有如空气对于万物,水对于鱼,...
    寒舍阅独阅读 412评论 0 1
  • 说句实话,我是一个对美食挑剔导致又很淡薄的人。从19岁与现在的老公认识,就开始了美食探索实践之旅,直到现在落下了一...
    智营体阅读 290评论 0 0
  • 越来越体会到一个点——事情都是做出来的,你只要做下去,就自然会有进度,就自然能克服一些,之前难以想象的困难。 今天...
    菜心昕阅读 252评论 0 0