Assume o controlo total do teu armazenamento utilizando a nossa API
Se preferires utilizar a tua solução personalizada para gerir o teu armazenamento de dados online, sem utilizar um browser, podes utilizar a nossa API. Nesta página, podes encontrar exemplos de como trabalhar com a nossa API. Continuaremos a expandi-la e a acrescentar mais informações ao longo do tempo para te facilitar ao máximo o trabalho com a API. Se tiveres comentários, ideias ou perguntas sobre esta funcionalidade, não hesites em enviar-nos um e-mail para support@myairbridge.com.
Noções básicas de WebDAV
Introdução
- Podes usar o curl para todas as chamadas.
Autenticação
- Podes autenticar-te usando o cabeçalho de autenticação Básico.
- Ou simplesmente adiciona
--user "username:password"
às tuas chamadas curl. - Para directórios protegidos apenas por palavra-passe, guest funcionará sempre como um nome de utilizador (e.g. guest:password).
Substituir cabeçalho
- Se o cabeçalho estiver em falta,
T
é o valor predefinido. F
valor = Os ficheiros/directórios alvo estão protegidos contra a escrita por cima.T
valor = Os ficheiros/directórios de destino serão substituídos se existirem. Os diretórios não são mesclados, mas completamente substituídos.
Obter detalhes do nó
- O método PROPFIND HTTP está definido no RFC2518 RFC2518.
Espaços de nomes XML
URI | Prefixo |
---|---|
DAV: | d: |
https://xml.myairbridge.cloud/ns | m: |
Propriedades do nó
Propriedade | api.note | Dir. | Ficheiro |
---|---|---|---|
d:href |
Deves evitar utilizar este URL. Está aqui apenas para compatibilidade com clientes WebDAV nativos. Em vez disso, utiliza m:node-url . |
Sim | Sim |
m:node-url |
URL deste nó. | Sim | Sim |
d:creationdate |
Regista a hora e a data em que o recurso foi criado. | Sim | Sim |
d:displayname |
Fornece um nome para o recurso que é adequado para apresentação a um utilizador. | Sim | Sim |
d:getcontentlength |
Tamanho do nó em bytes. | Sim | Sim |
d:getetag |
ETag único. | Não | Sim |
d:getlastmodified |
Data da última modificação. | Sim | Sim |
d:quota-available-bytes |
Tamanho do armazenamento disponível livre em bytes. | Sim | Não |
d:resourcetype |
Contém o elemento d:collection se o nó for um diretório. |
Sim | Sim |
Exemplo
curl -X PROPFIND 'DIRECTORY_URL'
Response:
<?xml version="1.0" encoding="utf-8"?>
<d:multistatus xmlns:d="DAV:" xmlns:m="https://xml.myairbridge.cloud/ns">
<d:response>
<d:href>DIRECTORY_URL</d:href>
<m:node-url>DIRECTORY_URL</m:node-url>
<d:propstat>
<d:prop>
<d:creationdate>Mon, 01 Jan 2024 00:00:00 GMT</d:creationdate>
<d:getcontentlength>123456</d:getcontentlength>
<d:displayname>Directory name</d:displayname>
<d:getlastmodified>Mon, 01 Jan 2024 00:00:00 GMT</d:getlastmodified>
<d:resourcetype>
<d:collection/>
</d:resourcetype>
<d:quota-available-bytes>5497558015424</d:quota-available-bytes>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
</d:response>
<d:response>
<d:href>DIRECTORY_URL/SUBDIRECTORY</d:href>
<m:node-url>DIRECTORY_URL/SUBDIRECTORY</m:node-url>
<d:propstat>
<d:prop>
<d:creationdate>Mon, 01 Jan 2024 00:00:00 GMT</d:creationdate>
<d:getcontentlength>0</d:getcontentlength>
<d:displayname>Subdirectory name</d:displayname>
<d:getlastmodified>Mon, 01 Jan 2024 00:00:00 GMT</d:getlastmodified>
<d:resourcetype>
<d:collection/>
</d:resourcetype>
<d:quota-available-bytes>5497558015424</d:quota-available-bytes>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
</d:response>
<d:response>
<d:href>DIRECTORY_URL/FILE</d:href>
<m:node-url>DIRECTORY_URL/FILE</m:node-url>
<d:propstat>
<d:prop>
<d:creationdate>Mon, 01 Jan 2024 00:00:00 GMT</d:creationdate>
<d:getcontentlength>123456</d:getcontentlength>
<d:displayname>File name</d:displayname>
<d:getlastmodified>Mon, 01 Jan 2024 00:00:00 GMT</d:getlastmodified>
<d:resourcetype/>
<d:getetag>54e93f66461535114d8bc6745f66df38</d:getetag>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
</d:response>
</d:multistatus>
Criar um diretório
- A pasta principal tem de existir.
curl -X MKCOL 'PARENT_DIRECTORY_URL/DIRECTORY_NAME'
Copiar
- Substitui um arquivo/diretório de destino por padrão.
- Utiliza o cabeçalho Overwrite para evitar a substituição.
Copiar um ficheiro
curl -X COPY 'SOURCE_FILE_URL' -H 'Destination: TARGET_FILE_URL' -H 'Overwrite: F'
Copiar um diretório
curl -X COPY 'SOURCE_DIRECTORY_URL' -H 'Destination: TARGET_DIRECTORY_URL' -H 'Overwrite: F'
Copiar um diretório sem o seu conteúdo
curl -X COPY 'SOURCE_DIRECTORY_URL' -H 'Destination: TARGET_DIRECTORY_URL' -H 'Depth: 0'
Mover
- Substitui um arquivo/diretório de destino por padrão.
- Utiliza o cabeçalho Overwrite para evitar a substituição.
Mover um ficheiro
curl -X MOVE 'SOURCE_FILE_URL' -H 'Destination: TARGET_FILE_URL' -H 'Overwrite: F'
Mover um diretório
curl -X MOVE 'SOURCE_DIRECTORY_URL' -H 'Destination: TARGET_DIRECTORY_URL' -H 'Overwrite: F'
Apagar
Apagar um ficheiro
curl -X DELETE 'FILE_URL'
Apagar um diretório
curl -X DELETE 'DIRECTORY_URL'
Descarregar
Descarregar um ficheiro inteiro
curl -L -o 'some.file' 'FILE_URL'
Descarregar em fragmentos
-
Para garantir que a versão atual do ficheiro é lida de forma consistente, é necessário obter primeiro o URL de descarregamento.
curl -i 'FILE_URL'
Cabeçalhos de resposta:
HTTP/1.1 303 See Other Location: https://... ...
Se o redireccionamento for bem sucedido, a resposta contém o cabeçalho
Location
cujo valor será utilizado para descarregar partes do ficheiro. Este URL é utilizado para garantir que esta versão específica do ficheiro é lida. -
Lê partes individuais do ficheiro. Como exemplo, os primeiros 500 bytes são baixados usando um cabeçalho Range e são salvos no arquivo
chunk_file.bin
.curl -H 'Range: bytes=0-499' -o chunk_file.bin 'URL_FROM_LOCATION_HEADER'
Carregar
- Deves usar o URL
m:node-url
como umTARGET_DIRECTORY_URL
.
Carregar um ficheiro inteiro
- Para preservar o nome do ficheiro, utiliza o URL do diretório de destino com uma barra <code>/</code> no final.
- Para renomear o ficheiro, acrescenta o novo nome do ficheiro ao URL do diretório de destino.
curl -T 'path/to/some.file' 'TARGET_DIRECTORY_URL/'
curl -T 'path/to/some.file' 'TARGET_DIRECTORY_URL/NEW_FILE.NAME'
Carregar em fragmentos
- Cria um carregamento no diretório de destino.
- Faz o carregamento de todas as partes usando o cabeçalho de resposta <code>X-Upload-Chunk-Url</code>.
- Depois que a última parte é carregada, o servidor cria automaticamente o arquivo de destino.
Criando um carregamento
- O nome do carregamento (
X-Upload-Name
) deve ser único no diretório. Não podes ter 2 uploads simultâneos com o mesmo nome.
Cabeçalhos
Cabeçalho | Valor | Descrição |
---|---|---|
X-Upload-Name* | 1-128 caracteres UTF-8 | Nome único do carregamento no diretório de destino. |
X-File-Name* | 1-128 caracteres UTF-8 | Nome do ficheiro de destino. |
X-File-Size* | bytes | Tamanho do ficheiro. |
X-Last-Modified | Marca de tempo Unix | Data da última modificação do ficheiro. Se não for especificado, utiliza a data atual. |
Exemplo de cURL
curl -i -X POST \
-H 'X-Upload-Name: upload-name' \
-H 'X-File-Name: target.filename' \
-H 'X-File-Size: 1000000000' \
-H 'X-Last-Modified: 1234567890' \
'TARGET_DIRECTORY_URL/:chunked-upload'
Response headers:
HTTP/1.1 200 OK
X-Upload-Chunk-Url: https://...
Carregamento de arquivo em partes
- A criação de um carregamento em partes retorna o cabeçalho
X-Upload-Chunk-Url
. Usa esta URL para carregar todos os pedaços. - As partes podem ser carregadas em paralelo.
- Não é necessário seguir a ordem das partes.
- As partes não devem se sobrepor umas às outras.
Cabeçalhos
Cabeçalho | Valor | Descrição |
---|---|---|
X-File-Name* | 1-128 caracteres UTF-8 | Nome único do carregamento no diretório de destino. |
X-File-Range* | de-até Deslocamento em bytes |
Exemplo de cURL
curl -X PUT \
-H 'X-Upload-Name: upload-name' \
-H 'X-File-Range: 0-1048576' \
'UPLOAD_CHUNK_URL'
Carregar em massa
- Acelera o carregamento de pequenos ficheiros.
- O tamanho não deve exceder 100 MiB.
Exemplo de cURL
curl -X PUT \
-H 'Content-Type: multipart/form-data; boundary=BbC04y' \
--data-binary '@bulk_upload.txt' \
'TARGET_DIRECTORY_URL/:bulk-upload'
bulk_upload.txt
(CRLF deve ser usado para as quebras de linha):
--BbC04y
Content-Disposition: file; name="file"; filename="file1.txt"
X-File-Size: 123
... file1.txt contents ...
--BbC04y
Content-Disposition: file; name="file"; filename="file2.txt"
X-File-Size: 299
X-Last-Modified: 1234567890
... file2.txt contents ...
--BbC04y--