загрузка изображения на сервер с помощью swift 4 - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь загрузить фотографию из галереи на сервер, используя alamofire, и вот как я могу загрузить ее, используя почтальон

https://drive.google.com/file/d/1TYb8ao2KiCCK74BGZPFLdO64xhxd54Yv/view?usp=sharing

func uploadImage(){
var url = "\(BASE_URL)Image/Upload?model=tbl_accounts&model_id=\(AuthService.instance.userID)&model_tag=main"
//url = url.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!
guard let imageData = UIImageJPEGRepresentation(imgProfile.image!, 0.4) else {
    return
}
Alamofire.upload(imageData, to: URL(string: url)!, method: .post, headers: HeaderForLoggedUser).responseJSON { (response) in
    if let JSON = response.result.value as? NSDictionary {
        print(JSON)
    } else {
        let message = response.result.error != nil ? response.result.error!.localizedDescription : "Unable to communicate."
        print(message)
    }
}}

и этот код мой, ноон не загружается и не загружает изображение, и при попытке сгенерировать код из почтальона также выдает ошибку, и я не могу понять код, а вот код из почтового человека

`let headers = [
"content-type": "multipart/form-data; boundary=---- 
WebKitFormBoundary7MA4YWxkTrZu0gW",
"Content-Type": "application/x-www-form-urlencoded",
"APP_KEY": "{APP_KEY}",
"AUTH_KEY": "{AUTH_KEY}",
"Cache-Control": "no-cache",
]
let parameters = [
[
"name": "img",
"fileName": "C:\Users\Admin\Downloads\IMG-20190130-WA0006(1).jpg"
]
]

 let boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"

 var body = ""
 var error: NSError? = nil
 for param in parameters {
 let paramName = param["name"]!
 body += "--\(boundary)\r\n"
 body += "Content-Disposition:form-data; name=\"\(paramName)\""
 if let filename = param["fileName"] {
 let contentType = param["content-type"]!
 let fileContent = String(contentsOfFile: filename, encoding: 
 String.Encoding.utf8)
 if (error != nil) {
   print(error)
 }
 body += "; filename=\"\(filename)\"\r\n"
 body += "Content-Type: \(contentType)\r\n\r\n"
 body += fileContent
 } else if let paramValue = param["value"] {
 body += "\r\n\r\n\(paramValue)"
 }
 }

 let request = NSMutableURLRequest(url: NSURL(string: 
"https://nearyouweb.com/Api/v1/en/image/upload? 
 model=tbl_accounts&model_id=8")! as URL,
                                    cachePolicy: .useProtocolCachePolicy,
                                timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, 
completionHandler: { (data, response, error) -> Void in
 if (error != nil) {
 print(error)
 } else {
  let httpResponse = response as? HTTPURLResponse
 print(httpResponse)
 }
 })

dataTask.resume()`

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Я думаю, вам также нужно использовать многочастные данные при загрузке Almaofire

посмотреть это

let parameters = [
            // List Parameter here  if any
        ]

Alamofire.upload(multipartFormData: { (multipartFormData) in
            multipartFormData.append(imageData, withName: "photo_path", fileName: "swift_file.jpeg", mimeType: "image/jpeg")
            for (key, value) in parameters {
                multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
            }
            }, to:"yourURL")
    { (result) in
        switch result {
        case .success(let upload, _, _):

            upload.uploadProgress(closure: { (progress) in
                //Print progress
            })

            upload.responseJSON { response in
                //print response.result
            }

        case .failure(let encodingError):
               //print encodingError.description
        }
    }
0 голосов
/ 11 февраля 2019

Во-первых, это плохая практика - хранить изображение напрямую, часто рекомендуется сохранять ссылку на изображение и использовать библиотеку, такую ​​как SDWebImage или Kingfisher, для передачи URL-адреса изображения

Затем при отправке данных на сервер,вы используете Alamofire.request....., тогда ваш тип запроса должен быть .post или .put

Попробуйте и посмотрите, работает ли он.

...