上传照片Swift / iOS

时间:2016-09-06 17:04:22

标签: objective-c swift upload out-of-memory photos

对不起我的英语,我会尽我所能。 我在尝试从用户的图书馆上传照片时遇到问题。 首先,我使用此方法获得用户的照片

func grabPhotos(){


    let imgManager = PHImageManager.defaultManager()

    let requestOptions = PHImageRequestOptions()
    requestOptions.synchronous = false
    requestOptions.deliveryMode = .FastFormat

    let fetchOptions = PHFetchOptions()
    fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]

    if let fetchResult : PHFetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: fetchOptions){

        if fetchResult.count > 0{      

            for i in 0..<fetchResult.count{

                let asset =  fetchResult.objectAtIndex(i) as! PHAsset

                if NSComparisonResult.OrderedSame == asset.creationDate!.compare(self.appDelegate.dateLastUpload!){
                    print("meme date")
                }
                else if NSComparisonResult.OrderedAscending == asset.creationDate!.compare(self.appDelegate.dateLastUpload!){

                }

                else {

                    imgManager.requestImageDataForAsset(asset, options: requestOptions, resultHandler: { (data, string, orientation, objects) in

                        self.Upload((UIImage(data: data!)?.CGImage)! , nomImage: "\(asset.creationDate)" )
                    })
                }
            }

        }

        else{

            print("you got no photos")
        }
    }


}

正如您所看到的,每次我拍照时我都想将其上传到我的服务器。 上传部分效果很好。

这是上传方法

func clickUpload(image:CGImage,nomImage : String){



    let url = NSURL(string: "http://192.168.1.20:1993/upload")

    let image_photo = UIImage(CGImage: image)

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

    let boundary = generateBoundaryString()

    //define the multipart request type

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


    if var image_data = UIImageJPEGRepresentation(image_photo,0.8){

        let body = NSMutableData()

        let fname = nomImage
        let mimetype = "image/jpg"

        //define the data post parameter

        body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
        body.appendData("Content-Disposition:multipart/form-data; name=\"test\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
        body.appendData("enctype=\"multipart/form-data".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.setValue("multipart/form-data", forHTTPHeaderField: "content-Type")
        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()
    }
    else {
        print(« data nil")
    }
}

现在问题来了......如果我上传尺寸缩小的照片会很好,但我想在HighQualityFormat中上传它们。 我在我的设备上收到了170张照片,并且在使用此消息崩溃之前上传了大约80张照片

  

由于未捕获的异常终止应用&#39; NSInvalidArgumentException&#39;,原因:&#39; NSAllocateMemoryPages(1504802)失败&#39;

你们能帮助我解决这个问题还是给我另一种方法来实现这个目标?

谢谢大家。

0 个答案:

没有答案