如何使用PHP将Azure存储blob下载为本地文件?

时间:2014-09-03 19:22:07

标签: php azure azure-storage azure-storage-blobs

我想使用Azure存储中的文件名将Azure存储blob下载并保存为本地计算机上的文件。我在这个名为download.php的文件中使用了这里的步骤(tutorial link),当我去download.php时,我可以在浏览器中看到文件内容。如果我然后将index.php中的链接放到download.php中,我可以右键单击该链接并保存为",并将文件另存为myfile.doc。然后我可以成功打开myfile.doc。

的index.php:

echo '<a href="http://myserver/dev/download.php" >Click me</a>';

...然而 我想知道的是如何获得链接到&#34;另存为&#34;没有用户必须右键单击。此外,我有文件名(来自Azure存储) - 但我不知道如何使用该文件名保存文件。当用户点击链接时,如何使用文件名将文件保存到用户的“下载”目录中?

1 个答案:

答案 0 :(得分:1)

为此,我将index.php更改为表单:

echo '<form method="post" action="download.php"><div id="divexport">';
   echo '<input type="hidden" name="Export" value="coverLetter">';
   echo '<input type="submit" id="Export" value="Cover Letter" />';
   echo '</div></form>';

然后在fpassthru

之前添加标题信息到download.php
// Create blob REST proxy.
$blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString);
$blobfile = "myblob.pdf";
$filename = basename($blobfile);
$ext = new SplFileInfo($filename);
$fileext = strtolower($ext->getExtension());

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

    if($fileext === "pdf") {
        header('Content-type: application/pdf');
    } else if ($fileext === "doc") {
        header('Content-type: application/msword'); 
    } else if ($fileext === "docx") {
        header('Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document'); 
    } else if($fileext === "txt") {
        header('Content-type: plain/text');
    }
    header("Content-Disposition: attachment; filename=\"" . $filename . "\"");
    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 />";
}