我试图发送用户需要到服务器的图像。 我得到的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]];
这是因为你的图像大小限制被突破。
更好地处理这种方式来实现以下逻辑。
寄件人
转换UIimage
到NSData
分裂的NSData
不同的数据块(建议每1024块)
发送和跟踪的每个块NSData
接收器
声明NSData
和存储的第一部分NSData
块(1024)到它,这是接收。
接收下一大块NSData
和利用appendData:
方法追加它
一旦所有的块被接收时,将接收到NSData
作为UIImage
确保以设计不同的结构用于将数据传送作为块如结构来表示的细节(总块,总大小,块大小等),结构来表示的数据(当前组块的大小,当前组块号码等。) ,结构来表示响应数据(传递状态,大块编号递送等)。
我猜你只是想在一个时间你的缓冲区写入的数据太多。 做这样的事情,以环比数据和块发送,而不是:
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