首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >上传多部分图像给出错误ios

上传多部分图像给出错误ios
EN

Stack Overflow用户
提问于 2019-01-04 05:07:13
回答 1查看 0关注 0票数 0

我正在尝试创建一个多部分请求来上传我的图像。但它没有按预期工作。有人可以解释我做错了什么。

代码语言:javascript
复制
static func makeImageRequest(_ urlString: String,version:String, method:FYIHTTPMethod,formData:Data?,fileName:String, completionHandler: @escaping (_ dictionary:NSDictionary?, _ error:NSError?) -> Void ) -> URLSessionTask {
    let fullURL:String = "https://" + domain + ":8243/fyi/" + version + "/" + urlString

    let request = NSMutableURLRequest(url: URL(string: fullURL)!)
    request.timeoutInterval = 300
    request.httpMethod = method.rawValue

    request.setValue("multipart/form-data;boundary=*****", forHTTPHeaderField: "Content-Type")
    request.httpBody = formData

    let accessToken = FYISession.sharedInstance.getAccessToken()
    request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
    request.setValue("application/json", forHTTPHeaderField: "Accept")
    request.setValue(fileName, forHTTPHeaderField: "image")

    let defaultConfigObject:URLSessionConfiguration = URLSessionConfiguration.default
    let defaultSession:URLSession = URLSession(configuration: defaultConfigObject, delegate: FYIURLSessionDelegate(), delegateQueue: OperationQueue.main)

    let task = defaultSession.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
        guard error == nil && data != nil else {   
            DispatchQueue.main.async {
                completionHandler(nil, error as NSError?)
            }
            return
        }

        if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
            var message = ""

            if let dta = data{
                do {
                    let json = try? JSONSerialization.jsonObject(with:dta, options: JSONSerialization.ReadingOptions.allowFragments) as? NSDictionary
                    message = json??.object(forKey: "message") as? String ?? ""
                }
            }
            let httpError:NSError = NSError(domain: "HTTP", code: httpStatus.statusCode, userInfo: FYIConnection.userInfo(message))
            DispatchQueue.main.async {
                completionHandler(nil, httpError)
            }
            return
        }

        if (data != nil) {
            do {
                let json:NSDictionary = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as! NSDictionary
                let api_status:Bool = json.object(forKey: "api_status") as! Bool

                if (api_status){
                    DispatchQueue.main.async {
                        completionHandler(json,nil)
                    }
                }else {
                    let message:String = json.object(forKey: "message") as! String

                    let httpError:NSError = NSError(domain: FYIConnection.bundleIdentifier(), code: FYIError.apiError.rawValue, userInfo: FYIConnection.userInfo(message))
                    DispatchQueue.main.async {
                        completionHandler(nil, httpError)
                    }
                }
            } catch let jsonError as NSError {
                DispatchQueue.main.async {
                    completionHandler(nil,jsonError)
                }
            }
        }else {
            let httpError:NSError = NSError(domain: FYIConnection.bundleIdentifier(), code: 1, userInfo: FYIConnection.userInfo(""))
            DispatchQueue.main.async {
                completionHandler(nil, httpError)
            }
        }
    })
    task.resume()
    return task
}

主体是

代码语言:javascript
复制
override func createBodyWithParameters(_ parameters: [String: String]?, image: UIImage?, paths: [String]?, boundary: String) -> Data {
    let body = NSMutableData()
    let data = UIImagePNGRepresentation(image!)

    body.appendString("--\(boundary)\r\n")
    body.appendString("Content-Disposition: form-data; name=\"file\"; filename=\"" + (self.txtMobileNumber?.text ?? "") + ".png"  + "\"\r\n")
    body.appendString("\r\n")
    body.append(data!)
    body.appendString("\r\n")
     body.appendString("--\(boundary)--\r\n")
    return body as Data
}
EN

回答 1

Stack Overflow用户

发布于 2019-01-04 14:49:06

尝试修复这样的主体:

代码语言:javascript
复制
override func createBodyWithParameters(_ parameters: [String: String]?, image: UIImage?, paths: [String]?, boundary: String) -> Data {
    let body = NSMutableData()
    let mimeType = "image/jpeg"
    let data = UIImagePNGRepresentation(image!)

    body.appendString("--\(boundary)\r\n")
    body.appendString("Content-Disposition: form-data; name=\"file\"; filename=\"" + (self.txtMobileNumber?.text ?? "") + ".png"  + "\"\r\n")
    body.appendString("Content-Type: \(mimeType)\r\n\r\n")
    body.appendString("\r\n")
    body.append(data!)
    body.appendString("\r\n")
    body.appendString("--\(boundary)--\r\n")
    return body as Data
}

还尝试添加这个:

代码语言:javascript
复制
request.setValue(String(describing: formData.length), forHTTPHeaderField: "Content-Length")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档