使用swift将集合视图图像上传到服务器

时间:2016-04-01 07:49:42

标签: swift2 uicollectionview http-post

我正在开发一个具有UICollectionView的应用程序,就像Github中的#zhangao0086 / DKImagePickerController#example一样。现在我需要将显示的UICollectionviewCell图像上传到服务器。任何人都可以建议我正确上传。提前致谢。

UICollectionView代码如下:

func barButtonItemClicked(barButtonItem: UIBarButtonItem)
{
    let myUrl = NSURL(string: "http://moneymonkey.tokiiyo.com/api/signature");

    let typeItem: InsuranceType = InsuranceManager.sharedInstance.TypeArray[0]
    let compItem: Companies = InsuranceManager.sharedInstance.CompArray[0]

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

    let param = [
        "api_key"  : "AiK58j67",
        "api_secret"    : "a#9rJkmbOea90-",
        "phone"    : "\(mobile)",
        "policy_type"   :   "\(typeItem.name)",
        "company"   :   "\(compItem.cname)"
    ]

    print("Policy_type: \(typeItem.name)")
    let boundary = generateBoundaryString()

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

    let imageData = UIImagePNGRepresentation(?)  //here what imageView 

    if(imageData==nil)  { return; }

    request.HTTPBody = createBodyWithParameters(param, filePathKey: "file", imageDataKey: imageData!, boundary: boundary)


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

        if error != nil {
            print("error=\(error)")
            return
        }

        // You can print out response object
        print("******* response = \(response)")

        // Print out reponse body
        let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
        print("****** response data = \(responseString!)")
        do{

            _ = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary
            dispatch_async(dispatch_get_main_queue(),{
            });
        }
        catch
        {

            // report error
            print("Oops!! Something went wrong\(error)")
        }
    }

    task.resume()

}

func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData {
    let body = NSMutableData();

    if parameters != nil {
        for (key, value) in parameters! {
            body.appendString("--\(boundary)\r\n")
            body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
            body.appendString("\(value)\r\n")
        }
    }

    let filename = "image.png"

    let mimetype = "image/png"

    body.appendString("--\(boundary)\r\n")
    body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
    body.appendString("Content-Type: \(mimetype)\r\n\r\n")
    body.appendData(imageDataKey)
    body.appendString("\r\n")



    body.appendString("--\(boundary)--\r\n")

    return body
}

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

将图像上传到服务器

var RoomRouter = express.Router();

RoomRouter.get('/:roomId/message/:messageId', function(req, res) {
  console.log('Room Id: '+req.params.roomId);
  console.log('Message Id: '+req.params.messageId);
  res.status(200);
  res.send("Ok");
});

app.use('/chat/room', RoomRouter);

1 个答案:

答案 0 :(得分:0)

Ĵ

您可以使用Alamofire https://github.com/Alamofire/Alamofire

像这样使用:

Alamofire.upload(.POST, "YourURl", file: YourFile)
         .progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in
             print(totalBytesWritten)

             // This closure is NOT called on the main queue for performance
             // reasons. To update your ui, dispatch to the main queue.
             dispatch_async(dispatch_get_main_queue()) {
                 print("Total bytes written on main queue: \(totalBytesWritten)")
             }
         }
         .responseJSON { response in
             debugPrint(response)
         }