2015-06-16 2 views
0

Итак, я последовал этому предложению: https://stackoverflow.com/a/27014372/4751488.Как загрузить изображение на сервер с ios с Alamofire

Когда я запустил свой сценарий, вы не загрузите фотографию. Я не получаю ошибки в ответе JSON только, что изображение не было загружено. Ани идеи?

моя главная функция:

var image : UIImage = UIImage(named:"record")! 
    let imageData2 = UIImagePNGRepresentation(image) 

    imageViewController.image = image 

    var parameters = [ 
     "pic"   :NetData(data: imageData2!, mimeType: MimeType.ImageJpeg ,filename: "customName.jpg"), 
     "otherParm"  :"Value" 
    ] 


    let urlRequest = self.urlRequestWithComponents("http://www.xxx.xx/uploadPhoto.php", parameters: parameters) 

    Alamofire.upload(urlRequest.0, urlRequest.1) 
     .progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in 
      println("\(totalBytesWritten)/\(totalBytesExpectedToWrite)") 
     } 
     .responseJSON { (request, response, JSON, error) in 
      println("REQUEST \(request)") 
      println("RESPONSE \(response)") 
      println("JSON \(JSON)") 
      println("ERROR \(error)") 
    } 

и мои urlRequestWithComponents выглядит следующим образом:

func urlRequestWithComponents(urlString:String, parameters:NSDictionary) -> (URLRequestConvertible, NSData) { 

    // create url request to send 
    var mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: urlString)!) 
    mutableURLRequest.HTTPMethod = Alamofire.Method.POST.rawValue 
    //let boundaryConstant = "myRandomBoundary12345" 
    let boundaryConstant = "NET-POST-boundary-\(arc4random())-\(arc4random())" 
    let contentType = "multipart/form-data;boundary="+boundaryConstant 
    mutableURLRequest.setValue(contentType, forHTTPHeaderField: "Content-Type") 


    // create upload data to send 
    let uploadData = NSMutableData() 

    // add parameters 
    for (key, value) in parameters { 

     uploadData.appendData("\r\n--\(boundaryConstant)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 

     if value is NetData { 
      // add image 
      var postData = value as! NetData 


      //uploadData.appendData("Content-Disposition: form-data; name=\"\(key)\"; filename=\"\(postData.filename)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 

      // append content disposition 
      var filenameClause = " filename=\"\(postData.filename)\"" 
      let contentDispositionString = "Content-Disposition: form-data; name=\"\(key)\";\(filenameClause)\r\n" 
      let contentDispositionData = contentDispositionString.dataUsingEncoding(NSUTF8StringEncoding) 
      uploadData.appendData(contentDispositionData!) 


      // append content type 
      //uploadData.appendData("Content-Type: image/png\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) // mark this. 
      let contentTypeString = "Content-Type: \(postData.mimeType.getString())\r\n\r\n" 
      let contentTypeData = contentTypeString.dataUsingEncoding(NSUTF8StringEncoding) 
      uploadData.appendData(contentTypeData!) 
      uploadData.appendData(postData.data) 

     }else{ 
      uploadData.appendData("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n\(value)".dataUsingEncoding(NSUTF8StringEncoding)!) 
     } 
    } 
    uploadData.appendData("\r\n--\(boundaryConstant)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 



    // return URLRequestConvertible and NSData 
    return (Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: nil).0, uploadData) 
} 

код PHP:

<?php 
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead 
// of $_FILES. 

$uploaddir = "/var/www/html/upload/uploads/"; 

// PS: custom filed name : pic 
$uploadfile = $uploaddir . basename($_FILES['pic']['name']); 

    if (move_uploaded_file($_FILES["pic"]["tmp_name"], $target_file)) { 
    $array = array ("code" => "1", "message" => "successfully"); 
} else { 
    $array = array ("code" => "0", "message" => "Possible file upload   attack!".$uploadfile); 
} 

echo json_encode ($array); 

?> 

rsponse в Xcode:

JSON Optional({ 
code = 0; 
message = "Possible file upload attack!/var/www/html/upload/uploads/customName.jpg";}) 
ERROR nil 
+0

Я изменил свой код на это предложение, и теперь его слова: http://stackoverflow.com/a/26747857/4751488 –

ответ

2

Старая тема, но если вы ищете ответ, вы используете функцию move_uploaded_file с параметром var $ target_file, который не инициализирован. Вы должны были использовать $ uploadfile

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