2016-04-21 2 views
0

Я пытаюсь загрузить изображение на сервер PHP, и загрузка изображений работает нормально. Но я также хочу отправить некоторые параметры с самим файлом изображения. Пожалуйста, помогите мне с приведенным ниже кодом на Swift 2.2/iOS 9.3 для того, как я могу добавить параметры вместе с файлом изображения.Загрузить изображение с параметром в Swift 2.2

Мой код PHP сервер выглядит:

 $info = pathinfo($_FILES['file']['name']); 

    if ($info) { 

     $imageName = md5(uniqid(rand(), true)); 

     $imageSize = getimagesize($_FILES['file']['tmp_name']); 
     if ($imageSize === FALSE) { 
      $newname = "default.jpg"; 
     } 
     else { 
      $ext = $info['extension']; // get the extension of the file 
      $newname = $imageName.".".$ext; 
     } 
     $target = './images/'.$newname;  
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target)) 
{ 
      sendResponse(200, 'SUCCESS_IMAGE'); 
      return true; 
} 

Swift код выглядит:

func UploadRequest() 
{ 
    let url = NSURL(string: "http://www.themostplayed.com/rest/upload.php") 

    let request = NSMutableURLRequest(URL: url!) 
    request.HTTPMethod = "POST" 

    let boundary = generateBoundaryString() 


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

    if (image.image == nil) 
    { 
     return 
    } 

    let image_data = UIImagePNGRepresentation(image.image!) 


    if(image_data == nil) 
    { 
     return 
    } 


    let body = NSMutableData() 

    let fname = "test.png" 
    let mimetype = "image/png" 




    body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData("Content-Disposition:form-data; name=\"test\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData("hi\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 



    body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData("Content-Disposition:form-data; name=\"file\"; filename=\"\(fname)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData("Content-Type: \(mimetype)\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData(image_data!) 
    body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 


    body.appendData("--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 



    request.HTTPBody = body 



    let session = NSURLSession.sharedSession() 


    let task = session.dataTaskWithRequest(request) { 
     (
     let data, let response, let error) in 

     guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { 
      print("error") 
      return 
     } 

     let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) 

     print(dataString) 

    } 

    task.resume() 


} 


func generateBoundaryString() -> String 
{ 
    return "Boundary-\(NSUUID().UUIDString)" 
} 

ответ

1

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

func UploadRequest() { 

    var parameters = [String:AnyObject]()//define parameter according to your requirement 
    parameters = ["imageName":"Sample"] 

    let URL = "http://www.themostplayed.com/rest/upload.php" 
    let image = UIImage(named: "image.png") 

    Alamofire.upload(.POST, URL, multipartFormData: { 
    multipartFormData in 

    if let imageData = UIImageJPEGRepresentation(image, 0.6) { 
     multipartFormData.appendBodyPart(data: imageData, name: "image", fileName: "file.png", mimeType: "image/png") 
    } 

    for (key, value) in parameters { 
     multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
    } 

    }, encodingCompletion: { 
     encodingResult in 

    switch encodingResult { 

    case .Success(let upload, _, _): 
     print("success") 

     upload.responseJSON { response in 
      print(response.request) // original URL request 
      print(response.response) // URL response 
      print(response.data)  // server data 
      print(response.result) // result of response serialization 

     if let JSON = response.result.value { 
      print("JSON: \(JSON)") 
     } 
     } 

    case .Failure(let encodingError): 
     print(encodingError) 
    } 
    }) 
} 

Вы можете ознакомиться с руководством и информацией API Alamofire по ссылке ниже.

URL: https://github.com/Alamofire/Alamofire

Надежда это работает для вас.

+0

Спасибо за помощь, вы уверены, что библиотека Alamofire не будет нарушать какие-либо рекомендации Apple. Мой код загрузки изображений работает отлично даже сейчас, просто хочу добавить параметры. Я думаю, что если мы сможем сделать это на моем существующем коде, это будет великолепно! –

+0

Да, это не нарушает ни одну из директив Apple. Также он широко используется для выполнения задачи веб-сервиса. Как и раньше, в этой библиотеке я использовал тот же код, который вы использовали для загрузки изображения, но теперь я использую Alamofire api для него. –

Смежные вопросы