0

我正在尝试将图像上传到 PHP 服务器并且图像上传工作正常。但我也想用图像文件本身发送一些参数。请帮助我使用 Swift 2.2 / iOS 9.3 上的以下代码,了解我想如何将参数与图像文件一起添加。

我的 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)"
}
4

1 回答 1

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)
     }
  })
}

您可以在下面的链接中查看 Alamofire 的指南和 API 信息。

网址:https ://github.com/Alamofire/Alamofire

希望对你有效。

于 2016-04-26T15:03:27.007 回答