Привет, ребята, извините за мой плохой английский. Я хотел бы задать этот вопрос, потому что мне трудно загружать файл (не для создания файла, а для загрузки) в хранилище файлов Azure (НЕ НАСТОЯЩЕМУ ХРАНИЛИЩА БЛОКА). (при попытке выполнить код / запустить в браузере 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);
}
[ОТВЕТ]
отдельное спасибо @ Аарону Чену и @ Гаураву Мантри.
просто добавьте file_get_contents, чтобы получить сам файл.
Измените имя общего ресурса на строчные.
и вместо того, чтобы использоватьcreateFileFromContentAsync«использовать»createFileFromContent‘
Во-первых, вы должны убедиться, что у вас есть общий файловый ресурс с именем mydisk
в хранилище файлов Azure, а затем попробуйте следующий код. Я проверил это, оно должно работать.
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;
}
}
Других решений пока нет …