Upload image with multipart form-data iOS in Swift

前端 未结 7 1094
無奈伤痛
無奈伤痛 2020-11-27 13:08

i am having a problem with uploading image with multipart-form

here is my code i used from this answer

    var request = NSMutableURLRequest(URL: url         


        
7条回答
  •  自闭症患者
    2020-11-27 13:50

    No Need to use any library for upload images using multipart request.

    Swift 4.2

    func uploadImage(paramName: String, fileName: String, image: UIImage) {
        let url = URL(string: "http://api-host-name/v1/api/uploadfile/single")
    
        // generate boundary string using a unique per-app string
        let boundary = UUID().uuidString
    
        let session = URLSession.shared
    
        // Set the URLRequest to POST and to the specified URL
        var urlRequest = URLRequest(url: url!)
        urlRequest.httpMethod = "POST"
    
        // Set Content-Type Header to multipart/form-data, this is equivalent to submitting form data with file upload in a web browser
        // And the boundary is also set here
        urlRequest.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
    
        var data = Data()
    
        // Add the image data to the raw http request data
        data.append("\r\n--\(boundary)\r\n".data(using: .utf8)!)
        data.append("Content-Disposition: form-data; name=\"\(paramName)\"; filename=\"\(fileName)\"\r\n".data(using: .utf8)!)
        data.append("Content-Type: image/png\r\n\r\n".data(using: .utf8)!)
        data.append(image.pngData()!)
    
        data.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!)
    
        // Send a POST request to the URL, with the data we created earlier
        session.uploadTask(with: urlRequest, from: data, completionHandler: { responseData, response, error in
            if error == nil {
                let jsonData = try? JSONSerialization.jsonObject(with: responseData!, options: .allowFragments)
                if let json = jsonData as? [String: Any] {
                    print(json)
                }
            }
        }).resume()
    }
    

    If you have any header to add, you can add it via urlRequest.setValue method.

    Source: https://fluffy.es/upload-image-to-server/

提交回复
热议问题