【问题标题】:Upload and Download images in Azure Blob Storage在 Azure Blob 存储中上传和下载图像
【发布时间】:2016-10-11 18:29:58
【问题描述】:

我正在尝试使用 Azure PHP SDK 将图像从 HTML 表单上传到 Azure Blob 存储。当我尝试下载图像时出现问题。结果页面可以在帖子底部看到。

我使用临时名称存储图像,我认为这是两个问题之一。我不确定,但第二个问题是下载图像时。我是否必须将其从 getContentStream() 转换为图像?

$_FILES['driverLicenseFront']['tmp_name']

这是上传图片的html表单:

<form role="form" method="POST" action="{path_to_controller}" data-toggle="validator" enctype="multipart/form-data">
    <div class="form-group">
        <label for="driverLicenseFront">Upload Driver's License(Front)</label>
        <input type="file" id="driverLicenseFront" name="driverLicenseFront">
    </div>
    <submit button>
</form>

在控制器中,我像这样存储文件:

// First check if there is a container
$blob = New Blob($_SESSION['userid']);
$blob->createContainerIfNotExists();
// Upload image to Azure Blob Storage
$content = fopen($_FILES['driverLicenseFront']['tmp_name'].'', "r");
$blob->uploadToContainer($content,'DriverLicenseFrontSide');

Blob 是我处理 Blob 的自定义类

我需要使用链接下载文件:

<a href="../controller/blobs.php?blob_name=DriverLicenseFrontSide" target="_new">Download</a>

我在控制器中捕获了请求:

if(isset($_GET['blob_name'])){
    $blob = New Blob($_SESSION['userid']);
    $blob->downloadBlob($_GET['blob_name']);
} 

Blob类的作用:

public function downloadBlob($blob_name){
    try {
        // Get blob.
        $blob = $this->blobRestProxy->getBlob($this->containerName, $blob_name.'.jpg');
        fpassthru($blob->getContentStream());
    }
    catch(ServiceException $e){
        // Handle exception based on error codes and messages.
        // Error codes and messages are here:
        // http://msdn.microsoft.com/library/azure/dd179439.aspx
        $code = $e->getCode();
        $error_message = $e->getMessage();
        echo $code.": ".$error_message."<br />";
    }
}

结果:

����JFIF,,��ICC_PROFILE�mntrRGB XYZ �$acsp���-)�=ޯ�U�xB��ʃ9 descDybXYZ�bTRC�dmdd��gXYZ hgTRC�lumi |meas �$bkpt �rXYZ �rTRC�tech �vued ��wtptpcprt�7chad�,descsRGB IEC61966-2-1 black scaledXYZ $����curv #(-27;@EJOTY^chmrw|�������������������������...

【问题讨论】:

  • 嗨 Mitsos,您的问题现在解决了吗?

标签: php azure blob azure-sdk-php


【解决方案1】:

您似乎忘记添加响应的content-type 以将二进制内容转换为图像内容。

尝试在您的downloadBlob() 函数中添加以下代码。

$blob = $this->blobRestProxy->getBlob($this->containerName, $blob_name.'.jpg');
header("Content-Type:image/jpeg");
header('Content-Disposition: attachment; filename="' . $blob_name . '"');
fpassthru($blob->getContentStream());

如有任何疑问,请随时告诉我。

【讨论】:

    猜你喜欢
    • 2018-11-21
    • 2018-08-03
    • 2017-11-08
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    相关资源
    最近更新 更多