Abbiamo un'astrazione del file system che ci consente di passare facilmente dalla memoria locale a quella cloud (Azure).Accoda al flusso CloudBlockBlob
Per i file di lettura e scrittura che abbiamo i seguenti membri:
Stream OpenRead();
Stream OpenWrite();
Parte della nostra applicazione "fasci" di documenti in un unico file. Per il nostro fornitore di storage locale OpenWrite
restituisce un flusso appendable:
public Stream OpenWrite()
{
return new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite, BufferSize, useAsync: true);
}
Per l'archiviazione blob Azure facciamo la seguente:
public Stream OpenWrite()
{
return blob.OpenWrite();
}
Purtroppo questo sovrascrive il contenuto di un blob ogni volta. È possibile restituire un flusso scrivibile che può essere aggiunto a?
Questo è quello che ho finito per fare. L'approccio consigliato sembra essere 'CloudBlockBlob.PutBlock' ma ci affidiamo a una libreria PDF per eseguire il nostro" raggruppamento "che funziona solo con un singolo flusso di input. –
'CloudBlockBlob.PutBlock' è raccomandato perché se il file diventa grande, l'approccio sopra non sarebbe efficiente poiché si scarica l'intero blob e lo si carica nuovamente. Con 'PutBlock' stai caricando solo la parte aggiunta. –
Sì, questo è un grande svantaggio di * sostituire * il blob ogni volta. Tuttavia, come detto, siamo limitati dalla nostra libreria PDF. Potremmo esaminare la memorizzazione nella cache di una copia locale del BLOB se questo diventa un problema. –