Documentation
SDK client
Télécharger depuis un lien

Télécharger depuis un lien

La méthode secrecyClient.cloud.downloadDataFromLink télécharge la donnée derrière un lien et la déchiffre sur l'appareil. Elle prend le dataLinkSlug — la partie publique de l'URL — et un objet crypto contenant la clé de donnée chiffrée et le mot de passe, tous deux renvoyés par uploadData dans sa propriété sharing au moment de la création du lien. Elle renvoie les octets déchiffrés sous forme de Uint8Array.

L'objet crypto est ce qui rend la donnée lisible. Sans lui, le téléchargement renvoie une charge chiffrée impossible à ouvrir.

share.ts
const downloadFromLink = async ({
  dataLinkSlug,
  key,
  password,
}: {
  dataLinkSlug: string;
  key: string;
  password: string;
}): Promise<Uint8Array | null> => {
  // First we need to check if the secrecyClient is available
  if (!secrecyClient) {
    return null;
  }
 
  try {
    const bytes = await secrecyClient.cloud.downloadDataFromLink({
      dataLinkSlug,
      // key is the encryptedDataKey returned by uploadData
      crypto: { key, password },
    });
 
    return bytes;
  } catch (error) {
    console.error(error);
    return null;
  }
};

Un mot de passe absent ou incorrect fait lever Unable to decrypt the data! The password is not valid! ou Unable to read encrypted data without password!. Lorsque les octets téléchargés ne correspondent pas à l'empreinte attendue, la méthode lève Content does not match.

Progression et annulation

Les fichiers volumineux sont téléchargés puis déchiffrés, et chaque phase rapporte sa propre progression. Passez les callbacks downloadProgress et decryptProgress pour les suivre, et un signal pour interrompre l'opération.

share.ts
const bytes = await secrecyClient.cloud.downloadDataFromLink({
  dataLinkSlug,
  crypto: { key, password },
  downloadProgress: (progress) => console.log('download', progress),
  decryptProgress: (progress) => console.log('decrypt', progress),
  // abort the download from an AbortController
  signal: controller.signal,
});

Inspecter un lien avant de télécharger

La fonction fetchDataLinkMetadata lit la description publique d'un lien sans télécharger son contenu, ce qui est la bonne manière d'afficher le nom, la taille ou le type du fichier avant de lancer un transfert lourd. Elle prend uniquement le slug et ne nécessite aucun client : elle fonctionne donc aussi pour les destinataires sans compte.

share.ts
import { fetchDataLinkMetadata } from '@secrecy/lib';
 
const getLinkMetadata = async (dataLinkSlug: string) => {
  try {
    // No client and no password needed, the metadata is public
    const metadata = await fetchDataLinkMetadata(dataLinkSlug);
 
    // { name, md5, md5Encrypted, size, mime, isEncrypted, ... }
    return metadata;
  } catch (error) {
    console.error(error);
    return null;
  }
};

La propriété size renvoyée est un bigint, et isEncrypted indique si un mot de passe sera nécessaire. Lorsque le slug n'existe pas ou que la réponse ne peut pas être analysée, la fonction lève Unable to parse data link json!.