php - iOS 从 Windows Azure 下载 BLOB

标签 php ios azure blob

我正在上传我的文件并将其存储在我的 blob 服务上,如下所示

- (IBAction)upLoadButton:(UIButton *)sender{
    NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"imgToServer.jpg"], 90);

    NSString *urlString = @"http://myWebSite/createBlobDirect.php";

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"POST"];

    NSString *boundary = @"---------------------------14737809831466499882746641449";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];

    NSMutableData *body = [NSMutableData data];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\"imageFromIOS\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[NSData dataWithData:imageData]];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [request setHTTPBody:body];
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
    NSLog(@"RETURN > %@",returnString);

}

BLOB创建成功,虽然我从BLOB下载数据时无法读取数据,这是我的代码:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSString *convertedBuffer = [[NSString alloc]initWithData:self.buffer encoding:NSUTF8StringEncoding];
    NSLog(@"%@",convertedBuffer);
    //THESE OBJECTS FAILS TO BE ALLOC!
    imageFromServer = [[NSData alloc]initWithBase64EncodedData:self.buffer options:NSUTF8StringEncoding];
    UIImage *image = [[UIImage alloc]initWithData:imageFromServer];
    [imageView setImage:image];

}

我的问题是:当我尝试将缓冲区分配到 NSString 甚至 NSData 中时,它们都是零! 难道是我使用的解码方式?

检索 BLOB 的 PHP 文件

<?php
    //require_once 'vendor\autoload.php';

    require_once __DIR__ . '/vendor/autoload.php';

    use WindowsAzure\Common\ServicesBuilder;
    use WindowsAzure\Blob\Models\CreateContainerOptions;
    use WindowsAzure\Blob\Models\PublicAccessType;
    use WindowsAzure\Common\ServiceException;

    // Create blob REST proxy.
    $connectionString = "[WORKING CONNECTION STRING]";
    $blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString);

    $blob_name = "myblob";

    try {
        // Get blob.
        $blob = $blobRestProxy->getBlob("CONTAINER", $blob_name);


        fpassthru($blob->getContentStream());


    }
    catch(ServiceException $e){
        // Handle exception based on error codes and messages.
        // Error codes and messages are here:
        // http://msdn.microsoft.com/en-us/library/windowsazure/dd179439.aspx
        $code = $e->getCode();
        $error_message = $e->getMessage();
        echo $code.": ".$error_message."<br />";
    }

?>

最佳答案

解码错误,试试这个...

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
        NSData *tempData = [self.buffer base64EncodedDataWithOptions:NSUTF8StringEncoding];
       // NSString *convertedBuffer = [[NSString alloc] initWithData:self.buffer encoding:NSUTF8StringEncoding];
        NSString *convertedBuffer = [[NSString alloc] initWithData:tempData encoding:NSUTF8StringEncoding];
        NSLog(@"%@",convertedBuffer);

        imageFromServer = [[NSData alloc]initWithBase64EncodedData:tempData options:NSUTF8StringEncoding];
        UIImage *image = [[UIImage alloc]initWithData:imageFromServer];
        [imageView setImage:image];


    }

关于php - iOS 从 Windows Azure 下载 BLOB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25001961/

相关文章:

php - 在 firebug 或 chrome 开发人员中更改客户端的 javascript 变量

php - 为什么我的代码出现 fatal error : Uncaught exception 'DOMPDF_Exception' with message 'Frame not found in cellmap

php - 将内容保存到 mysql 数据库时出现撇号 "'“问题

ios - 播放前将视频置于暂停状态

php - 在 php 浏览器中重启 mysql,权限问题?

ios - setEditing() 在 Swift 中到底做了什么?

iphone - 如何通过点击更改 UILabel 的 alpha?

azure - Team Foundation Service 发布到具有多个分支的 Azure

c# - Azure表存储跨多个分区批量插入?

c# - 如何访问我只需要在 Application.Start 上创建一次的变量