Git Product home page Git Product logo

Comments (3)

shff avatar shff commented on July 4, 2024

Código

O código para gerar o presign é o seguinte:

using System;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.Auth;

namespace cmmg_upload_poc
{
    class Program
    {
        static void Main(string[] args)
        {
            var accountName = "cmmgdevelopment";
            var accessKey = "VhN/tJCNGWUqtmH+OBjs28qx3kWUu4ULERtSJduR7RzGpV9oyx5vnl3zWXje3eIoebfwRMvOYoHJ5w75ytw75A==";
            var containerName = "documents";
            var blobName = "doc.txt";


            // Parte importante 

            var auth = new StorageCredentials(accountName, accessKey);
            var account = new CloudStorageAccount(auth, true);
            var client = account.CreateCloudBlobClient();
            var container = client.GetContainerReference(containerName);
            var blob = container.GetBlockBlobReference(blobName);

            var adHocSAS = new SharedAccessBlobPolicy()
            {
                SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(30),
                Permissions = SharedAccessBlobPermissions.Write,
            };
            var sasBlobToken = blob.GetSharedAccessSignature(adHocSAS);
            var uri = blob.Uri + sasBlobToken;


            Console.WriteLine(uri);
        }
    }
}

Parâmetros

Variáveis de ambiente

Login/senha que devem ficar nas variáveis de ambiente:

var accountName = "cmmgdevelopment";
var accessKey = "VhN/tJCNGWUqtmH+OBjs28qx3kWUu4ULERtSJduR7RzGpV9oyx5vnl3zWXje3eIoebfwRMvOYoHJ5w75ytw75A==";

Clique aqui para ver onde encontrar essas variáveis dentro do Azure

Nome do container

Isso é meio que uma subpasta. Na prática serve para organizar os arquivos, mas o Azure consegue dar permissões diferentes etc para containers diferentes.

Acho que podemos fazer um por tipo de documento, o que acham?

`var containerName = "documents";`

Nome do arquivo

É só o nome do arquivo. Acho que essa parte aqui pode ser uma GUID... só precisa ter a extensão certa!

var blobName = "doc.txt";

Coisas que eu preciso que seja retornado pra mim

Para fazer upload no frontend eu preciso só desse URI que é gerado. O Mime Type o próprio navegador consegue pra mim, tá ok.

Maior proteção

A assinatura permite colocar mais parâmetros. Basicamente é esse SharedAccessBlobPolicy.

No codigo exemplo estamos usando o SharedAccessExpiryTime e o Permissions, mas podemos colocar outras coisas:

https://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1#shared-access-signature-parameters

Talvez seja interessante limitar por IP também. É fácil e rápido.

O tempo para permitir fazer upload pode ser bem rápido, que tal uns 15 minutos?

Como fazer o upload depois?

Isso será feito pelo frontend.

Mas na linha de comando podemos usar o CURL para testar.

curl -X PUT -T Program.cs -H "x-ms-date: $(date -u)" -H "Content-Type: text/txt" -H "x-ms-blob-type: BlockBlob" "https://cmmgdevelopment.blob.core.windows.net/documents/doc.txt?sv=2017-07-29&sr=b&sig=6sirCBJfhklAcsLGcIdcUXCsVlcVDhCEovS6v%2FoMBkU%3D&se=2018-03-15T03%3A19%3A17Z&sp=w"

Aqui eu subo o arquivo Program.cs que tem o mime type text/txt

Aí depois eu acesso ele em https://cmmgdevelopment.blob.core.windows.net/documents/doc.txt.

Traduzindo:

"https://" + account + ".blob.core.windows.net/" + container + "/" + arquivo

from educat-erp.

lucascostadev avatar lucascostadev commented on July 4, 2024

@shferreira publicado a api do upload
http://upload.sandbox.eti.br/swagger/#!/Presign/ApiPresignPost

Você testa pra mim por favor ?

from educat-erp.

shff avatar shff commented on July 4, 2024

@lucascostadev Está funcionando perfeitamente!

Fechando pois foi concluido em d42b6b7

from educat-erp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.