将图像从iOS应用程序发送到服务器的正确方法

问题描述:

我从相机捕获图像并将图像转换为base64格式。将图像发送到服务器需要更多时间。如果没有互联网连接,我将它存储到本地数据库,一旦我获得互联网连接,我想发送多个图像到服务器。从应用程序发送图像到服务器的最佳方式是什么?将图像从iOS应用程序发送到服务器的正确方法

+0

通过base64发送图像是不可取的,它需要很多时间才能上传。使用Multipart进行上传。通过此链接http://*.com/questions/29623187/upload-image-with-multipart-form-data-ios-in-swift – Madhu

+0

您可以使用多部分格式发送图像。 –

您可以为多要求如下,然后用你的NSURLSession

NSString *boundary = [NSString stringWithFormat:@"Boundary-%@", [[NSUUID UUID] UUIDString]]; 

     // configure the request 
    NSString *urlString = YOUR_URL; 
    NSURL *url =[NSURL URLWithString:urlString]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
    [request setHTTPMethod:@"POST"]; 
    // set content type 
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
    [request setValue:contentType forHTTPHeaderField: @"Content-Type"]; 

    //create body 
    request.HTTPBody = [self createBodyWithParameters:params paths:@[filePath] fieldName:fieldName boundary:boundary]; //params(NSDictionary) WILL BE YOUR PARAMETERS TO WEB SERVICE 

    [request setValue:[NSString stringWithFormat:@"%lu",(long)[request.HTTPBody length]] forHTTPHeaderField:@"Content-Lenght"]; 
+0

此问题标记为“swift”。你的解决方案可能有价值,但不是用OP所要求的语言编写的,所以它是无关紧要的。请在Swift中提供答案。谢谢。 – Moritz

这一要求你有没有试过Alamofire?它支持文件上传。

下面是图像负载的例子:

public func requestImage(url: String) -> SignalProducer<UIImage, NetworkError> { 
     return SignalProducer { observer, disposable in 
      let serializer = Alamofire.Request.dataResponseSerializer() 
      Alamofire.request(.GET, url) 
       .response(queue: self.queue, responseSerializer: serializer) { 
        response in 
        switch response.result { 
        case .Success(let data): 
         guard let image = UIImage(data: data) else { 
          observer.sendFailed(.IncorrectDataReturned) 
          return 
         } 
         observer.sendNext(image) 
         observer.sendCompleted() 
        case .Failure(let error): 
         observer.sendFailed(NetworkError(error: error)) 
        } 
      } 
     } 
    } 

而这一次的例子为async image load