发送的UIImage超过NSOutputStream [关闭](Sending UIImage ov

2019-08-17 19:25发布

我试图发送用户需要到服务器的图像。 我得到的JPEG表示,追加,要上传的照片,然后通过NSOutputStream发送数据所需的字符串。 但是,当我试图让照片从服务器返回的,我只看到它的10%从顶部。 任何帮助,将不胜感激。

顺便说一句。 插座是开放和连接。

这里是我的代码:

NSString *requestString = [NSString stringWithFormat:@"SubmitPhoto::%@::", userID];
NSData * stringData = [requestString dataUsingEncoding:NSUTF8StringEncoding];

NSData *imgData = UIImageJPEGRepresentation(image, 1.0);

NSMutableData *completeData = [[NSMutableData alloc] initWithBytes:[stringData bytes] length:[stringData length]];
[completeData appendData:imgData];

//sending NSData over to server
[self.outputStream write:[completeData bytes] maxLength:[completeData length]];

Answer 1:

这是因为你的图像大小限制被突破。

更好地处理这种方式来实现以下逻辑。

寄件人

  1. 转换UIimageNSData

  2. 分裂的NSData不同的数据块(建议每1024块)

  3. 发送和跟踪的每个块NSData

接收器

  1. 声明NSData和存储的第一部分NSData块(1024)到它,这是接收。

  2. 接收下一大块NSData和利用appendData:方法追加它

  3. 一旦所有的块被接收时,将接收到NSData作为UIImage

确保以设计不同的结构用于将数据传送作为块如结构来表示的细节(总块,总大小,块大小等),结构来表示的数据(当前组块的大小,当前组块号码等。) ,结构来表示响应数据(传递状态,大块编号递送等)。



Answer 2:

我猜你只是想在一个时间你的缓冲区写入的数据太多。 做这样的事情,以环比数据和块发送,而不是:

    NSString *requestString = [NSString stringWithFormat:@"SubmitPhoto::%@::", userID];
    NSData * stringData = [requestString dataUsingEncoding:NSUTF8StringEncoding];

    NSData *imgData = UIImageJPEGRepresentation(image, 1.0);

    NSMutableData *completeData = [[NSMutableData alloc] initWithBytes:[stringData bytes] length:[stringData length]];
    [completeData appendData:imgData];

    NSInteger bytesWritten = 0;
    while ( completeData.length > bytesWritten )
    {
        while ( ! self.outputStream.hasSpaceAvailable )
            [NSThread sleepForTimeInterval:0.05];

        //sending NSData over to server
        NSInteger writeResult = [self.outputStream write:[completeData bytes]+bytesWritten maxLength:[completeData length]-bytesWritten];
        if ( writeResult == -1 ) {
            NSLog(@"error code here");
        }
        else {
            bytesWritten += writeResult;
        }
    }
}
// Both input and output should be closed to make the code work in swift


文章来源: Sending UIImage over NSOutputStream [closed]