Comments (3)
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:
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.
@shferreira publicado a api do upload
http://upload.sandbox.eti.br/swagger/#!/Presign/ApiPresignPost
Você testa pra mim por favor ?
from educat-erp.
@lucascostadev Está funcionando perfeitamente!
Fechando pois foi concluido em d42b6b7
from educat-erp.
Related Issues (20)
- Pendência não notificada para aluno HOT 3
- Tela de Pendências - Fiadores HOT 1
- Painel dinâmico de treino, e painel default está com erro. HOT 1
- Ajustes após reunião do dia 04/05/2018 na FELUMA HOT 4
- Contrato HOT 1
- Foto 3x4 HOT 1
- Responsável Legal
- Documentos obrigatórios
- Boleto HOT 1
- Termo de Confidencialidade e Sigilo
- Ficha de Matrícula
- Separar as rotas dos cards da matrícula HOT 1
- Mudar o [GET] /enrollments para retornar apenas status HOT 3
- Colocar os metadados do /enrollments no [options] HOT 2
- Dúvidas
- Ajustes no período de matrícula
- Novo Layout
- Approvals
- API V2 HOT 2
- Ajustes na api reunião 06/06/2018 HOT 22
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from educat-erp.