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

  1. 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.

  2. 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 um TARGET_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

  1. Cria um carregamento no diretório de destino.
  2. Faz o carregamento de todas as partes usando o cabeçalho de resposta <code>X-Upload-Chunk-Url</code>.
  3. 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--