首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过NSOutputStream发送UIImage

通过NSOutputStream发送UIImage
EN

Stack Overflow用户
提问于 2013-03-20 22:52:27
回答 2查看 3.7K关注 0票数 9

我正在尝试将用户拍摄的图像发送到服务器。我得到了JPEG表示,将其附加到上传照片所需的字符串中,然后通过NSOutputStream发送数据。然而,当我试图从服务器取回照片时,我只能从顶部看到其中的10%。任何帮助都将不胜感激。

顺便说一句。插座已打开并已连接。

下面是我的代码:

代码语言:javascript
复制
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]];
EN

回答 2

Stack Overflow用户

发布于 2013-03-21 01:11:21

这是因为您的镜像大小超出了限制。

处理此问题的更好方法是实现以下逻辑。

发件人

  1. Convert UIimage to NSData
  2. NSData

拆分成不同的区块(每个区块1024个为并跟踪每个区块

接收器

  1. 声明NSData并将NSData块(1024)的第一部分存储到其中,该部分是对NSData的下一块进行received.
  2. Receive,并使用appendData:方法将其附加到
  3. 一旦接收到所有块,则将接收到的NSData转换为all

确保设计不同的结构来作为块传输数据,例如表示细节的结构(总块,总大小,块大小等),表示数据的结构(当前块大小,当前块数量等),表示响应数据的结构(交付状态,交付的块数量等)。

票数 5
EN

Stack Overflow用户

发布于 2013-03-21 00:28:15

我猜你只是想一次为你的缓冲区写太多的数据。这样做可以循环遍历数据,并将其分块发送:

代码语言:javascript
复制
    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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15526977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档