Jagamisviis:


Kasuta Web API-t failide üleslaadimiseks Azure Bloobimällu

See juhend näitab, kuidas rakendada Azure File API-d. Need juhised võimaldavad teie veebisaidi kasutajatel või külastajatel vaadata, redigeerida, luua ja kustutada Azure-sse salvestatud manuseid.

Märkus.

  • Azure Toetatakse kuni 10 GB suurust faili.
  • Selle näite juhiseid järgides saate veerunimesid muuta või kasutada mõnda muud tabelit.
  • Need API-d töötavad ainult juba loodud kirjete puhul. Nende API-de abil üles laaditud manused lingitakse selle kirjega.
  • Need API-d teevad märkme (marginaal) olemile mitu värskendust, kuna failid laaditakse üles tükkidena.

eeltingimused

See ülevaade sõltub kohandatud tabelist nimega File Test. Saate luua sama nimega kohandatud tabeli või valida mõne muu tabeli kasutamise. Lisateavet kohandatud tabeli loomise kohta leiate teemast Tabelite loomine ja redigeerimine kasutades Power Apps.

1\. etapp: saidi sätete loomine

Enne portaalide Azure File API kasutamist peate portaalihalduse rakendusega lubama nõutavad saidisätted. Saidi sätted sõltuvad tabelist, mida soovite Azure File API-ga suhtlemisel kasutada.

  1. Avage Portaali haldusrakendus.

  2. Valige portaalihalduse rakenduse vasakpoolsel paanil Saidi sätted.

  3. Valige Uus.

  4. Sisestage väljaleSait / failihaldus / EnableWebAPI.

  5. Valige veebisaidi loendist oma veebisaidi kirje.

  6. Väärtuse jaoks sisestage tõene.

  7. Valige Salvesta ja sule.

  8. Lisage järgmised saidisätted.

    Saidi sätte nimi DefaultValue Kirjeldus Kohustuslik
    Sait/FileManagement/EnableWebAPI Lubab failihalduse Web API Ja
    Sait/failihaldus/BlobStorageAccountName Salvestusruumi konto nimi Ja
    Sait/failihaldus/BlobStorageContainerName Konteineri nimi Ja
    Sait/failihaldus/toetatudfailitüüp Komaeraldusega failitüüpide väärtused. Näiteks: .jpeg,.jpg Ja
    Sait/failihaldus/toetatudMimeType ; eraldatud MIME tüübid Ja
    Sait/FileManagement/MaxFileSize 1048576 (1 GB) Maksimaalne failimaht KB-des No
    Sait/FileManagement/DownloadViaSASUri Tõene (vaikimisi lubatud) Otsustamine, kas kasutada faili allalaadimiseks SAS URI-d No
    Sait/failihaldus/DownloadSASUriExpiryTimeSpan 00:10:00 (10 minutit) Maksimaalne aegumisaeg sas uri puhul(vajalik, kui 7 on tõene) No
    Sait/FileManagement/DownloadChunkSizeInKB 4096 (4 MB) Allalaaditava tüki suuruse üle otsustamine (vajalik, kui 7 on vale) No
  9. Lisage need täiendavad saidisätted, et lubada Web API märkuste jaoks (märkused):

    Saidi sätte nimi Väärtus
    Webapi/marginaal/lubatud true
    Webapi/marginaal/väljad *

Samm 2: Õiguste konfigureerimine

Peate konfigureerima õigused nii, et kasutajad saaksid kasutada funktsiooni Azure File API. Selles näites peate seadistama või looma uue veebirolli, mis kasutab API-d. Järgmisena tuleb lisada tabeliõigused tabelitele Failitest- ja märkmetabelid ning seostada tabeliõigused veebirolliga. Lõpuks määrate kasutajatele veebirolli, et nad saaksid API-d kasutada.

Märkus.

API järgib tabeliõigusi autenditud kasutaja veebirolli kontekstist või anonüümsest veebirollist. Kaaluge, kas teie kasutajatel on juba veebiroll, millel on juurdepääs teie veebisaidi konkreetsetele tabelitele, mida API vajab. API kasutamiseks ei pea te looma täiendavaid veebirolle.

Looge veebiroll

Kui teil pole nõutava tabeli õigustega veebirolli, tehke veebirolli loomiseks ja tabeliõiguste määramiseks järgmist.

  1. Avage Portaali haldusrakendus.

  2. Valige vasakpoolsel paanil jaotises Turve suvand Veebirollid.

  3. Tehke valik Uus.

  4. Sisestage väljaleNimi Azure Faili API kasutaja või mis tahes nimi, mis kajastab kõige paremini sellele funktsioonile juurde pääseva kasutaja rolli.

  5. Valige veebisaidi loendist oma veebisaidi kirje.

  6. Valige käsk Salvesta.

Tabeli õiguste loomine

  1. Avatud Power Pages disainistuudio.

  2. Valige tööruum Turve .

  3. Valige jaotises kaitsma suvand Tabeli õigused.

  4. Valige Uus õigus.

  5. Sisestagenime jaoks File Test Table Permission.

  6. Valige loendis Tabeli nimi väärtus File Test (cr463_filetest).

  7. Valige loendis Juurdepääsutüüp suvand Globaalne juurdepääs.

  8. Valige õigused Lugemine ja lisamine .

  9. Select + Lisa rollid ja vali varem loodud veebiroll.

  10. Valige käsk Salvesta.

  11. Järgige sarnaseid juhiseid, et luua veel üks õigus märkmete (marginaal) tabelile koos õigustega Kirjuta, Loe, Loo, Lisa ja lisada sama veebiroll.

Kontaktide lisamine veebirolli

  1. Avage Portaali haldusrakendus.

  2. Valige vasakpoolsel paanil jaotises Turve suvand Kontaktid.

  3. Valige kontakt, keda soovite selles näites API jaoks kasutada.

Märkus.

See kontakt on kasutajakonto, mida selles näites kasutatakse API testimiseks. Veenduge, et valite oma portaalis õige kontakti.

  1. Valige Seotud>Veebirollid. Veenduge, et kasutate portaali kontaktivormi. Kui kasutate haldusrakendust Power Pages , asub alamvõrk Veebirollid vahekaardi Üldine allosas.

  2. Valige Lisa olemasolev veebiroll.

  3. Valige varem loodud Azure File API kasutajaroll .

  4. Valige suvand Lisa.

  5. Valige Salvesta ja sule.

Rakendusele Microsoft Entra rollipõhiste õiguste lisamine

  1. Logige sisse saidile Azure , kus salvestusruumi konto loodi.

  2. Minge ressursigruppi, mis sisaldab salvestusruumikontot.

  3. Valige Juurdepääsu juhtimine (IAM)>Lisa>Lisa rollimäärang.

  4. Valige lugejaroll ja seejärel valige Edasi.

  5. Valige Kasutaja, rühma või teenusejuht ja seejärel valige + Vali liikmed.

  6. Valige parempoolsel külgpaneelil portaali ettevõtterakendus, otsides oma saidi nime, ja seejärel valige Vali. Rakenduse nimi on järgmises vormingus:

    Portals-<site name>

  7. Valige Läbivaatus + määrake>läbivaatus + määrake .

  8. Avage salvestusruumikonto ja seejärel valige Juurdepääsukontroll (IAM)>Lisa>rollimäärang.

  9. Valige roll Storage Blob Data Contributor ja seejärel valige Next (Edasi).

  10. Valige Kasutaja, rühma või teenusejuht ja seejärel valige + Vali liikmed.

  11. Valige paremas servas portaali ettevõtterakendus, otsides oma saidi nime, ja seejärel valige Vali.

  12. Valige Läbivaatus + määrake>läbivaatus + määrake.

3\. etapp: veebilehe loomine

Nüüd, kui olete lubanud Azure File API ja konfigureeritud kasutajaõigused, looge veebileht failitesti tabeli olemiloendiga.

  1. Avatud Power Pages disainistuudio.

  2. Valige tööruumis Leheküljed + Leht ja valige Muud viisid lehe lisamiseks.

  3. Sisestage dialoogiboksis Lehe lisamine väljaleLehe nimi tekst Faili testleht ja seejärel valige Alusta tühjast.

  4. Valige suvand Lisa.

  5. Valige Loend ja seejärel lisage uus loend või valige tabeli Failitest jaoks olemasolev loend.

    Looge kirjete vaatamiseks, redigeerimiseks, loomiseks ja kustutamiseks manuste jaoks leht järgmise näidiskoodiga.

  6. Avatud Power Pages disainistuudio.

  7. Valige tööruumis Leheküljed + Leht ja valige Muud viisid lehe lisamiseks.

  8. Sisestage dialoogiboksis Lehe lisamine lehe nime väljale Manusedja valige käsk Alusta tühjast .

  9. Valige suvand Lisa.

  10. Valige paremas ülanurgas suvand Redigeeri koodi .

  11. Valige Ava Visual Studio Code.

  12. Kopeerige järgmine olemi koodilõik ja kleepige see lehe jaotise <div></div> siltide vahele.

    <style>
    .containerforfile
    {
        display:flex;
        margin-bottom:30px; 
    }
    .btn-for-file
    {
        margin-right:10px;
    }
    .file-name
    {
        padding-top:6px;
    }
    .fileinput
    {
        margin-right:10px;
    }
    .container-progress
    {   
         width: 70%;
         max-width: 400px;  
         margin-top: 10px;   
         position: relative;
    } 
    .parent-progress
    {    
        width: 100%;    
        background-color: #2f5fef;    
        height: 30px;    
        margin-top: 25px;    
        margin-bottom: 20px;
    } 
    .child-progress
    {    
        width: 0%;    
        background-color: #53b453;    
        height: 100%;
    } 
    .prog 
    {    position: absolute;  
      display: block;   
       right: 0; 
    }
    
    #attachments{
        font-family: Arial, Helvetica, sans-serif;
        border-collapse: collapse;
        width: 100%;
      }
      #attachments td,
      #attachments th {
        border: 1px solid #ddd;
        padding: 8px;
      }
      #attachments tr:nth-child(even) {
        background-color: #f2f2f2;
      }
      #attachments tr:hover {
        background-color: #ddd;
      }
      #attachments th {
        padding-top: 12px;
        padding-bottom: 12px;
        text-align: left;
        background-color: #2f5fef;
        color: white;
      }
    </style>
    
    <script>
    function selectFile()
    {var child = document.getElementsByClassName("child-progress")[0];
                                    var progSpan = document.getElementsByClassName("prog")[0];
                                        child.style.width = 0 + "%";
                                    progSpan.innerHTML = 0 + "%";
        var elementToChooseFile = document.getElementById("fileinput");
        elementToChooseFile.click();
    }
    function chooseFile()
    {
        var elementToChooseFile = document.getElementById("fileinput");
        var filename =elementToChooseFile.files[0].name;
        var elementforfilename = document.getElementById("filename");
        elementforfilename.innerText = filename;
        uploadFileinChunks();
    }
    
    (function(webapi, $){
                    function safeAjax(ajaxOptions) {
                        var deferredAjax = $.Deferred();
    
                        shell.getTokenDeferred().done(function (token) {
                        // add headers for AJAX
                        if (!ajaxOptions.headers) {
                        $.extend(ajaxOptions, {
                            headers: {
                                "__RequestVerificationToken": token
                            }
                        }); 
                        } else {
                        ajaxOptions.headers["__RequestVerificationToken"] = token;
                    }
                    $.ajax(ajaxOptions)
                        .done(function(data, textStatus, jqXHR) {
                            validateLoginSession(data, textStatus, jqXHR, deferredAjax.resolve);
                        }).fail(deferredAjax.reject); //AJAX
                }).fail(function () {
                    deferredAjax.rejectWith(this, arguments); // on token failure pass the token AJAX and args
                });
    
                return deferredAjax.promise();  
            }
            webapi.safeAjax = safeAjax;
        })(window.webapi = window.webapi || {}, jQuery)
    
    function getFileName(fileName)
    {
        return fileName.replace(/\.azure\.txt$/, '');
    }
    function downloadFile()
    {
        var entityName = document.getElementById("entity_name").value;
        var entityId = document.getElementById("entity_id").value;
        var url = "/_api/file/download/" + entityName + "(" + entityId + ")/blob/$value";
        window.open(url, "_blank");
    }
    
    function uploadFileinChunks()
    {
        var filesizeelement = document.getElementById("filesize");
        var starttimelement = document.getElementById("starttime");
        starttimelement.innerText = new Date().toLocaleString();
        var endtimeelement = document.getElementById("endtime");
        var entityName = "cr463_filetest";
        var entityId = window.location.search.substring(4);
        var url = "/_api/file/InitializeUpload/" + entityName + "(" + entityId + ")/blob"
        var elementToChooseFile = document.getElementById("fileinput");
        var filename = "";
        if (elementToChooseFile.files.length > 0) {
            filename = elementToChooseFile.files[0].name;
        filesizeelement.innerText = elementToChooseFile.files[0].size / 1048576;
            const encodedFileName = encodeURIComponent(filename);
            filename = encodedFileName;
        }
        if (elementToChooseFile.files.length > 0 && elementToChooseFile.files[0].size > 0)
        {
                const chunkSize = 50*1024 *1024;
                let numberOfBlocks;
                let token;
                if (elementToChooseFile.files[0].size % chunkSize == 0)
                {
                    numberOfBlocks = elementToChooseFile.files[0].size / chunkSize;
                }
                else
                {
                    numberOfBlocks = parseInt(elementToChooseFile.files[0].size / chunkSize, 10) + 1;
                }
                webapi.safeAjax({
                    type: "POST",
                    url: url,//replace this with url 
                    headers: { "x-ms-file-name": elementToChooseFile.files[0].name, "x-ms-file-size": elementToChooseFile.files[0].size },
                    contentType: "application/octet-stream",
                    processData: false,
                    data: {},
                    success: function (response, status, xhr)
                    {
                        token = response;
                        uploadFileChunk(0);
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown)
                    {
                        alert(XMLHttpRequest.responseText);
                    }
                });
    
                function uploadFileChunk(blockno)
                {
                    var fileReader = new FileReader();
    
                    if (blockno < numberOfBlocks)
                    {
                        var end = (blockno * chunkSize + chunkSize) > elementToChooseFile.files[0].size ? blockno * chunkSize + elementToChooseFile.files[0].size % chunkSize : blockno * chunkSize + chunkSize;
                        var content = elementToChooseFile.files[0].slice(blockno * chunkSize, end);
                        fileReader.readAsArrayBuffer(content);
                    }
                    fileReader.onload = function ()
                    {
                        webapi.safeAjax({
                            type: "PUT",
                            url: "/_api/file/UploadBlock/blob?offset=" + (blockno * chunkSize) + "&fileSize=" + elementToChooseFile.files[0].size + "&chunkSize=" + chunkSize + "&token=" + token,
                            headers: { "x-ms-file-name": elementToChooseFile.files[0].name },
                            contentType: "application/octet-stream",
                            processData: false,
                            data: content,
                            success: function (res) {
                                var child = document.getElementsByClassName("child-progress")[0];
                                    var progSpan = document.getElementsByClassName("prog")[0];
                                    var percentComplete = ((parseFloat(end) / parseFloat(elementToChooseFile.files[0].size)) * 100).toFixed(2);
    
                                    child.style.width = percentComplete + "%";
                                    progSpan.innerHTML = percentComplete + "%";
                                    if (percentComplete == 100) {
                                        var table = document.getElementById('attachments');
                                        if(table.hidden)
                                        {
                                        var divForNoAttachment = document.getElementById("no-attachment-found");
                                        divForNoAttachment.hidden = true;
                                        table.hidden = false;
                                        }
                                        var row = document.createElement("tr"); 
                                        row.id = token;
                                        row.innerHTML=`<td><a target="_blank" href="/_api/file/download/annotation(` + token + `)/blob/$value" >` + elementToChooseFile.files[0].name + `</a></td>
                                                <td>`+  new Date().toLocaleString() + `</td>     
                                                <td><button class="btn btn-default" onClick="deleteFile('` + token + `');"><i class="glyphicon glyphicon-trash" aria-hidden="true"></i></button></td>`;
                                        table.firstElementChild.nextElementSibling.appendChild(row);
                                        endtimeelement.innerText = new Date().toLocaleString();
                                    }
                                uploadFileChunk(blockno + 1);
                            },
                            error: function (XMLHttpRequest, textStatus, errorThrown) {
                                alert(XMLHttpRequest.responseText);
                            }
                        });
                    }
                }
        }
        else
        {
        alert("no file chosen");
        }
    }
    
    function loadAllAttachments()
    {
        var fetchXmlQuery = `<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
      <entity name="annotation">
        <attribute name="filename" />
        <attribute name="annotationid" />  
        <attribute name="createdon"/>
        <attribute name="objectid" />
        <attribute name="objecttypecode" />
        <filter type="and">
        <condition attribute="filename" operator="like" value="%.azure.txt" />
        </filter>
        <link-entity name="cr463_filetest" from="cr463_filetestid" to="objectid" link-type="inner" alias="ad">
        <filter type="and">
        <condition attribute="cr463_filetestid" operator="eq" value="{` + window.location.search.substring(4) +`}"/>
    </filter>
    </link-entity>
      </entity>
    </fetch>`;
    
    var req = new XMLHttpRequest();
    
    req.open("GET", "/_api/annotations?fetchXml=" +  
        encodeURIComponent(fetchXmlQuery), true);
    
    req.setRequestHeader("Accept", "application/json");
    
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    
    req.onreadystatechange = function ()
    {
        if (this.readyState === 4)
        {
            this.onreadystatechange = null;
            if (this.status === 200)
            {
                var returned = JSON.parse(this.responseText);
                var results = returned.value;
                var loading = document.getElementById('loading');
                if (results.length == 0)
                {
                    var divForNoAttachment = document.getElementById("no-attachment-found");
                        divForNoAttachment.hidden = false;
                }
                else
                {
                for (var i = 0; i < results.length; i++)
                {
                    var table = document.getElementById('attachments');
                    if(table.hidden)
                    {
                        var divForNoAttachment = document.getElementById("no-attachment-found");
                        divForNoAttachment.hidden = true;
                        table.hidden = false;
                    }
                    var row = document.createElement("tr"); 
    
                    var fileName = results[i]["filename"];
                    fileName = fileName.replace(".azure.txt", "");
                    var createdOn = results[i]["createdon"];
                    var annotationid = results[i]["annotationid"];
                    row.id = annotationid;
                    row.innerHTML=`<td><a target="_blank" href="/_api/file/download/annotation(` + annotationid + `)/blob/$value" >` + fileName + `</a></td>
                    <td>`+  createdOn + `</td>     
                    <td><button class="btn btn-default" onClick="deleteFile('` + annotationid + `');"><i class="glyphicon glyphicon-trash" aria-hidden="true"></i></button></td>`;
                    table.firstElementChild.nextElementSibling.appendChild(row);
                }
                }
                loading.hidden= true;
            }
            else
            {
                alert(this.status);
            }
        }
    };
    req.send();
    }
    
    document.addEventListener("DOMContentLoaded", function(){
        loadAllAttachments();
    });
    function deleteFile(entityId)
    {
        var entityName = "annotation";
        var url = "/_api/file/delete/" + entityName + "(" + entityId + ")/blob/$value";
        webapi.safeAjax({
            url: url,
            type: "DELETE",
            success: function(){
    
                var row = document.getElementById(entityId);     
                row.parentNode.removeChild(row);
                var table = document.getElementById('attachments');
    
                if(table.hidden == false && table.tBodies[0].children.length == 0)
                { 
                var divForNoAttachment = document.getElementById("no-attachment-found");
                    divForNoAttachment.hidden = false;
                    table.hidden = true;
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown)
            {
                alert(XMLHttpRequest.responseText); 
            }
        });
    }
    </script> 
    <div style="margin-left:40px;"> 
    <div class="containerforfile" style="display: flex;"> 
      <input type="file" multiple="true" id="fileinput" onchange="chooseFile()" style="display: none;"> 
      <button type="button" id="button-to-choosefile" onclick="selectFile()" class="btn btn-default btn-for-file">Choose File</button> 
      <div id="filename" class="file-name">No File Selected</div> 
    </div> 
    <br> 
    <div> 
    <label for="filesize" id="file_size_label" class="field-label">FileSize(In MB): </label><div class="filesize" id="filesize"></div> 
    <label for="starttime" id="start_time_label" class="field-label">StartTime:</label><div class="starttime" id="starttime"></div> 
    <label for="endtime" id="end_time_label" class="field-label">EndTime:</label><div class="endtime" id="endtime"></div> 
    </div> 
     <div class="container-progress"> 
         <div class="parent-progress" style="width: 100%;background-color: #c1c1c1;    height: 30px;     margin-top: 25px;    margin-bottom: 20px;">         
            <div class="child-progress" style="width: 0%;    background-color: #53b453;    height: 100%;"></div>    
          </div>            
         <span class="prog">0%</span> 
    </div> 
    <br> 
    <br> 
    <h1>Attachments:</h1> 
    <div id="loading"> Loading Attachments...</div> 
     <div id="no-attachment-found" hidden>No Attachment Found!!</div> 
     <table id="attachments" hidden> 
      <thead> 
        <tr> 
          <th>File</th> 
          <th>Created On</th>       
          <th>Actions</th> 
        </tr> 
      </thead> 
    <tbody> 
    </tbody> 
    </table> 
    </div> 
    
  13. Koodi salvestamiseks valige CTRL+S .

  14. Minge tagasi faili testlehele, valige loend ja seejärel valige Redigeeri loendit.

  15. Avage Toimingud ja lubage seejärel kirje redigeerimine.

  16. Valige väljal Target Type (Sihtimistüüp) väärtus Veebileht.

  17. Veebilehe jaoks valige Manused.

  18. Kuvasildi jaoks sisestage tekst Manuste üleslaadimine.

  19. Valige nupp Valmis.

  20. Valige disainistuudio paremas ülanurgas Sync (Sünkrooni ), et värskendada saiti koodimuudatustega.

Samm 4: kasutage manuste üleslaadimiseks, allalaadimiseks ja kustutamiseks API-d

Veebi-API funktsionaalsuse testimine

  1. Valige eelversioon ja seejärel valige Töölaud.

  2. Logige oma saidile sisse kasutajakontoga, millele on määratud varem loodud Azure File API kasutajaroll .

  3. Avage varem loodud veebileht Faili testleht .

  4. Tehke parempoolses servas valik Laadi manused üles.

  5. Valige fail ja proovige see üles laadida.

  6. Proovige olemasolev fail alla laadida ja kustutada.

Nüüd, kui olete loonud näidisega veebilehe manuste üleslaadimiseks, allalaadimiseks ja kustutamiseks, saate vorme ja paigutust kohandada.

Veakoodid ja -teated

Järgmine tabel sisaldab erinevaid tõrkekoode ja -teateid, mis võivad ilmneda, kui kasutate Web API-d failide üleslaadimiseks rakendusse Azure.

Kirjeldus HTTP olek Tõrkekood Tõrketeade
Üleslaadimiseks pole faili lisatud 400 FU00001 Faili sisu pole määratud
Paramsis esitatud olemi ID või nimi pole õige 404 FU00002 Kirjet ei leitud
Kasutajal pole õigust 403 FU00003 Teil pole selle toimingu tegemiseks vajalikke õigusi
Antud faililaiend pole konfigureeritud 400 FU00004 Faililaiendit ei toetata.
Faili MIME tüüpi ei toetata 400 FU00005 Faili mimetüüpi ei toetata
Faili maht on konfigureeritust suurem 400 FU00006 Faili maht on suurem kui {0} MB
Azure konfiguratsioonid on valed 400 FU00007 Azure konfiguratsioonid on valed
Faili nime pole esitatud 400 FU00008 Päringust puudub x-ms-file-name-päis
API pole lubatud 501 FU00009 Azure webapi kasutamine pole lubatud
Pole kehtivat Azure faili värskendamiseks / uploadblockiks / kustutamiseks / allalaadimiseks 400 FU00010 Taotletud fail pole saadaval {0}
IP-piirang on lubatud salvestuskontol Azure 403 FU00011 IP-piirang on lubatud
Faili pole Azure-is allalaadimiseks olemas 400 FU00012 Faili pole olemas
Tüki suurus on suurem kui 100 mb 400 FU00013 Tüki suurus on suurem kui 100mb
Faili suurust pole antud 400 FU00014 Failimahtu pole esitatud
Toetatud failitüübid pole määratud 400 FU00015 Faililaiendit ei toetata
Toetatud MIME tüübid pole määratud 400 FU00016 Faili mimetüüpi ei toetata
Rohkem kui 128 mb fail ilma tükeldamiseta 400 FU00017 Faili suurus on üle 128 mb
Rakendusele Microsoft Entra pole luba antud 403 FU00018 Microsoft Entra Rakendusel pole selle toimingu tegemiseks õigusi
Sertifikaati pole olemas, et luua ühendus Azure-ga 400 FU00019 Serti pole olemas
Kui rentniku ID-d või kliendi ID-d või pisipilti rakenduse sätetes ei määrata 500 FU00020 Sisemine serveritõrge
Faili MIME tüüp/faililaiend pole toetatud 400 FU00021 Faili MIME-tüüpi või failinimelaiendit ei toetata
Konto nime või konteineri nime pole olemas või seda pole esitatud 400 FU00022 Azure konfiguratsioonid on valed