我正在尝试将用户拍摄的图像发送到服务器。我得到了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]];发布于 2013-03-21 01:11:21
这是因为您的镜像大小超出了限制。
处理此问题的更好方法是实现以下逻辑。
发件人
UIimage to NSData NSData拆分成不同的区块(每个区块1024个为并跟踪每个区块
接收器
NSData并将NSData块(1024)的第一部分存储到其中,该部分是对NSData的下一块进行received.appendData:方法将其附加到NSData转换为all确保设计不同的结构来作为块传输数据,例如表示细节的结构(总块,总大小,块大小等),表示数据的结构(当前块大小,当前块数量等),表示响应数据的结构(交付状态,交付的块数量等)。
发布于 2013-03-21 00:28:15
我猜你只是想一次为你的缓冲区写太多的数据。这样做可以循环遍历数据,并将其分块发送:
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 swifthttps://stackoverflow.com/questions/15526977
复制相似问题