Märkus
Juurdepääs sellele lehele nõuab autoriseerimist. Võite proovida sisse logida või kausta vahetada.
Juurdepääs sellele lehele nõuab autoriseerimist. Võite proovida kausta vahetada.
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.
Avage Portaali haldusrakendus.
Valige portaalihalduse rakenduse vasakpoolsel paanil Saidi sätted.
Valige Uus.
Sisestage väljaleSait / failihaldus / EnableWebAPI.
Valige veebisaidi loendist oma veebisaidi kirje.
Väärtuse jaoks sisestage tõene.
Valige Salvesta ja sule.
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 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.
Avage Portaali haldusrakendus.
Valige vasakpoolsel paanil jaotises Turve suvand Veebirollid.
Tehke valik Uus.
Sisestage väljaleNimi Azure Faili API kasutaja või mis tahes nimi, mis kajastab kõige paremini sellele funktsioonile juurde pääseva kasutaja rolli.
Valige veebisaidi loendist oma veebisaidi kirje.
Valige käsk Salvesta.
Tabeli õiguste loomine
Avatud Power Pages disainistuudio.
Valige tööruum Turve .
Valige jaotises kaitsma suvand Tabeli õigused.
Valige Uus õigus.
Sisestagenime jaoks File Test Table Permission.
Valige loendis Tabeli nimi väärtus File Test (cr463_filetest).
Valige loendis Juurdepääsutüüp suvand Globaalne juurdepääs.
Valige õigused Lugemine ja lisamine .
Select + Lisa rollid ja vali varem loodud veebiroll.
Valige käsk Salvesta.
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
Avage Portaali haldusrakendus.
Valige vasakpoolsel paanil jaotises Turve suvand Kontaktid.
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.
Valige Seotud>Veebirollid. Veenduge, et kasutate portaali kontaktivormi. Kui kasutate haldusrakendust Power Pages , asub alamvõrk Veebirollid vahekaardi Üldine allosas.
Valige Lisa olemasolev veebiroll.
Valige varem loodud Azure File API kasutajaroll .
Valige suvand Lisa.
Valige Salvesta ja sule.
Rakendusele Microsoft Entra rollipõhiste õiguste lisamine
Logige sisse saidile Azure , kus salvestusruumi konto loodi.
Minge ressursigruppi, mis sisaldab salvestusruumikontot.
Valige Juurdepääsu juhtimine (IAM)>Lisa>Lisa rollimäärang.
Valige lugejaroll ja seejärel valige Edasi.
Valige Kasutaja, rühma või teenusejuht ja seejärel valige + Vali liikmed.
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>
Valige Läbivaatus + määrake>läbivaatus + määrake .
Avage salvestusruumikonto ja seejärel valige Juurdepääsukontroll (IAM)>Lisa>rollimäärang.
Valige roll Storage Blob Data Contributor ja seejärel valige Next (Edasi).
Valige Kasutaja, rühma või teenusejuht ja seejärel valige + Vali liikmed.
Valige paremas servas portaali ettevõtterakendus, otsides oma saidi nime, ja seejärel valige Vali.
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.
Avatud Power Pages disainistuudio.
Valige tööruumis Leheküljed + Leht ja valige Muud viisid lehe lisamiseks.
Sisestage dialoogiboksis Lehe lisamine väljaleLehe nimi tekst Faili testleht ja seejärel valige Alusta tühjast.
Valige suvand Lisa.
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.
Avatud Power Pages disainistuudio.
Valige tööruumis Leheküljed + Leht ja valige Muud viisid lehe lisamiseks.
Sisestage dialoogiboksis Lehe lisamine lehe nime väljale Manusedja valige käsk Alusta tühjast .
Valige suvand Lisa.
Valige paremas ülanurgas suvand Redigeeri koodi .
Valige Ava Visual Studio Code.
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>
Koodi salvestamiseks valige CTRL+S .
Minge tagasi faili testlehele, valige loend ja seejärel valige Redigeeri loendit.
Avage Toimingud ja lubage seejärel kirje redigeerimine.
Valige väljal Target Type (Sihtimistüüp) väärtus Veebileht.
Veebilehe jaoks valige Manused.
Kuvasildi jaoks sisestage tekst Manuste üleslaadimine.
Valige nupp Valmis.
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
Valige eelversioon ja seejärel valige Töölaud.
Logige oma saidile sisse kasutajakontoga, millele on määratud varem loodud Azure File API kasutajaroll .
Avage varem loodud veebileht Faili testleht .
Tehke parempoolses servas valik Laadi manused üles.
Valige fail ja proovige see üles laadida.
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 |