【问题标题】:what is the correct way of uploading in azure file storage (NOT BLOB STORAGE) using php使用php在天蓝色文件存储(不是BLOB存储)中上传的正确方法是什么
【发布时间】:2017-11-26 07:46:20
【问题描述】:

大家好,抱歉我的英语不好。我想问这个问题,因为我很难在 Azure 文件存储(不是所谓的 BLOB 存储)中上传文件(不是创建文件而是上传)。 (当我尝试在 google chrome 浏览器上执行代码/运行时没有发生错误。但是当我查看 azure 存储文件时没有上传文件。)

所以基本上这是我的基本代码上传文件按钮。

<input type="file" class="btn btn-default" name="resFile" id="resFile" value="" />
<input type="submit" class="btn btn-default" value="Submit" data-inline="true"/>
<div id="res"></div>

那么这是我调用 ajax 请求的脚本。

 $(document).ready(function () {
      $("form").on('submit', (function (e) {
          e.preventDefault();

          $.ajax({
              url: "functions/function.php", // Url to which the request is send
              type: "POST",             // Type of request to be send, called as method
              data: new FormData(this), // Data sent to server, a set of key/value pairs (i.e. form fields and values)
              contentType: false,       // The content type used when sending data to the server.
              cache: false,             // To unable request pages to be cached
              processData: false,        // To send DOMDocument or non processed data file it is set to false
              success: function (data)   // A function to be called if request succeeds
              {
                  $("#res").hide().html(data).fadeIn('fast');
              }
          });
      }));
  });

最后是我上传的 php 代码:

<?php
require_once "../dependancies/vendor/autoload.php";

use MicrosoftAzure\Storage\Common\Exceptions\ServiceException;
use MicrosoftAzure\Storage\Common\Internal\Resources;
use MicrosoftAzure\Storage\Common\Internal\StorageServiceSettings;
use MicrosoftAzure\Storage\Common\Models\Range;
use MicrosoftAzure\Storage\Common\Models\Metrics;
use MicrosoftAzure\Storage\Common\Models\RetentionPolicy;
use MicrosoftAzure\Storage\Common\Models\ServiceProperties;
use MicrosoftAzure\Storage\Common\ServicesBuilder;
use MicrosoftAzure\Storage\Common\SharedAccessSignatureHelper;
use MicrosoftAzure\Storage\File\Models\CreateShareOptions;
use MicrosoftAzure\Storage\File\Models\ListSharesOptions;
use MicrosoftAzure\Storage\File\FileRestProxy;

  $connectionString = 'DefaultEndpointsProtocol=https;AccountName=MYACCNAME;AccountKey=MYACCKEY==';
$fileClient = ServicesBuilder::getInstance()->createFileService($connectionString);
uploadFile($fileClient);
function uploadFile($fileClient)
{
  $content = $_FILES["resFile"]["tmp_name"];
  $contentloc = $_FILES["resFile"]["tmp_name"];

  $shareName = 'myDISK';
  $range = new Range(0, 511);
    try {
        $fileClient->createFileFromContentAsync($shareName, $contentloc, $content, null);

        echo "<p style='color:green;'>File Uploaded successfully </p>";
    } catch (ServiceException $e) {
        $code = $e->getCode();
        $error_message = $e->getMessage();
        echo $code . ": " . $error_message . PHP_EOL;
    }
}
?>

这是我尝试上传文件的图片:

[编辑] 我在我的 ajax 处理程序上添加了这个

,
error: function (data)
{
  console.log(data);
},
failure: function (data)
{
  console.log(data);
}

[回答]

特别感谢@Aaron Chen 和@Gaurav Mantri。

只需添加 file_get_contents 即可获取文件本身。 将共享名称更改为小写。 而不是使用 'createFileFromContentAsync' 使用 'createFileFromContent'

【问题讨论】:

  • 您是否遇到任何错误?请编辑您的问题并将其包括在内。
  • 您好,先生。当我尝试执行我的代码时没有发现错误。但是当我查看 azure 存储文件时,它们没有上传文件。
  • ` $fileClient->createFileFromContentAsync($shareName, $contentloc, $content, null);` 我认为我的这部分代码正在运行。但我真的不知道文件在服务器中的位置
  • 我不是 100% 确定,但我相信您会因为共享名称而收到错误。请尝试 2​​ 件事:1) 在您的 AJAX 代码中包含错误处理程序。你应该在那里看到一些错误。和 2) 将共享名称更改为mydisk(全部小写)。
  • 嗨先生,我在成功处理程序之后添加了代码,错误:函数(数据){console.log(数据); },失败:函数(数据){console.log(数据); } 但当我查看控制台日志时,什么也没有发生。

标签: php ajax azure file-storage


【解决方案1】:

首先,您应该确保在 Azure 文件存储中有一个名为 mydisk 的文件共享,然后尝试以下代码。我测试了它,它应该可以工作。

function uploadFile($fileClient) {

    // Get the content of the uploaded file
    $content = file_get_contents($_FILES["resFile"]["tmp_name"]);
    // Get uploaded file name
    $filename = $_FILES["resFile"]["name"];

    // Change the share name to mydisk (all lowercase)
    $shareName = 'mydisk';
    try {
        // Use createFileFromContent instead of createFileFromContentAsync
        $fileClient->createFileFromContent($shareName, $filename, $content, null);    
        echo "<p style='color:green;'>File Uploaded successfully </p>";

    } catch (ServiceException $e) {
        $code = $e->getCode();
        $error_message = $e->getMessage();
        echo $code . ": " . $error_message . PHP_EOL;
    }
}

【讨论】:

  • 终于。它就像一个魅力......谢谢@Aaron Chen
  • 但是我并没有真正理解 'createFileFromContent' 和 'createFileFromContentAsync' 之间的区别
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 2017-05-30
  • 2023-03-20
  • 2022-01-08
  • 2019-08-11
  • 2015-09-09
  • 2012-06-16
  • 2015-11-06
相关资源
最近更新 更多