Arm*_*han 9 xcode objective-c nsstream nsoutputstream
我正在尝试将用户带到服务器的图像发送给服务器.我得到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]];
Run Code Online (Sandbox Code Playgroud)
这是因为您的图像大小限制被超出.
处理此问题的更好方法是实现以下逻辑.
寄件人
转换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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3612 次 |
| 最近记录: |