Не удается загрузить изображение с использованием пути к файлу в хранилище BLOB-объектов MS-Azure - PullRequest
0 голосов
/ 24 ноября 2018

Я занимаюсь разработкой веб-приложения с использованием служб Microsoft Azure.Я перехожу по этой ссылке, чтобы загрузить изображение в мое хранилище BLOB-объектов, но в документе отсутствуют некоторые фрагменты, которые приводят к определенным проблемам.Например, как мы определяем переменную $ fileToUpload и как она будет относиться к переменной $ myfile?Кроме того, если мы хотим загрузить файл из нашей системы во время работы приложения, в какой из двух переменных у нас должен быть абсолютный путь к моему изображению?Код, который я написал до сих пор для загрузки изображения, выглядит следующим образом:

function imageupload(string $current_user){
    $pt_id = $_POST['patientid'];
    if (strcmp($pt_id,"")==0){
        echo "Select PatientID to continue";
    }else{
        $accountexists = load($current_user, $pt_id);
        if ($accountexists == 0){
            $error = "Patient Id does not exist";
            echo $error;
        }else{
            $img_path = $_POST['uploadI'];
            if (strcmp($img_path, "")==0){
                 echo "Enter valid image path <br />";
            }
            else{
                require_once 'vendor/autoload.php';
                $connectionString = '****';
                // Create blob client.
                $blobClient = BlobRestProxy::createBlobService($connectionString);

                # Create the BlobService that represents the Blob service for the storage account

                $containerName = $current_user;

                $num = rand(10,10000);
                $num2 = (string) $num;
                $fileToUpload = $pt_id."_".$num2;

                # Upload file as a block blob
                echo "Uploading image: ".PHP_EOL;
                echo $img_path;
                echo "<br />";


                $content = fopen($img_path, "r");

                //Upload blob
                $blobClient->createBlockBlob($containerName, $fileToUpload, $content);
                echo "Image uploaded successfully! <br />";
            }
        }
    }
}

В этом коде я сохраняю свой путь к изображению в переменной $ img_path.И это код, который я использую для отображения изображения позже:

// Gets all the images from the hospital's container and filters out the images corresponding to a particular patient. 
// For the patient, the image would be saved on cloud with name as: <patientid>_<some random number>
// Eg- patient id= pt1 , so image name could be- pt1_3682
function uploadedimage(string $current_user, string $HospitalId, string $PatientId){
  $containerName = $HospitalId;
  $url = "";
  try{
      // Get blob.
      require_once 'vendor/autoload.php';
      // use MicrosoftAzure\Storage\Common\ServicesBuilder;
      $connectionString = '****';

      $blobClient = BlobRestProxy::createBlobService($connectionString);
      $blob_list = $blobClient->listBlobs($containerName);
      $blobs = $blob_list->getBlobs();
      $strlen = strlen($PatientId);
      $array_user = array();
      // echo "These are the blobs present in the container: ";
      foreach($blobs as $blob)
      {
          $name =  $blob->getName();
          $namesub = substr($name,0, $strlen);
          if (strcmp($namesub, $PatientId) == 0){
              array_push($array_user, $blob);
          }
      }
  }
  catch(ServiceException $e){
    $code = $e->getCode();
    $error_message = $e->getMessage();
    echo $code.": ".$error_message."<br />";
  }

  $url = "";
  try    {
      foreach($array_user as $blob)
      {
          $name =  $blob->getName();
          $url = $blob->getUrl();
          echo "<img src=\"".$url."\" alt=\"image post\"></br></br>";

      }

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

Но я не могу просмотреть свое изображение в HTML, который я указал.Все, что я получаю, это текст по умолчанию "изображение поста".Таким образом, я пришел к выводу, что в моем коде чего-то не хватает, из-за чего изображения не загружаются, но я не могу понять это из учебника по Azure.

Редактировать: я проверил свойства своего блобаи все они имеют размер 0, что означает, что они не загружаются должным образом.Также я понял, что в моей папке git есть некоторые изображения, которые были отправлены в облако вместе с моим кодом.Таким образом, если существует определенное изображение с именем abc.png , уже существующее в том же каталоге, что и мой код в Azure, и при загрузке этого изображения из моего веб-приложения, если в текстовом поле пути я указываю только abc.png , это изображение загружается в мой контейнер в правильном размере, но если это же изображение присутствует на моем рабочем столе и если я указываю полный путь к файлу моей локальной системы для этого изображения (или другого изображения)отсутствует в каталоге git, существующем в Azure) как C: /Desktop/abc.png, он загружается только как изображение размером 0 байт (которое по сути загружается неправильно).В чем могут быть проблемы, если он не может получать изображения из моей системы и может принимать только изображения, уже существующие в его каталоге git?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...