Mamy abstrakcję systemu plików, która pozwala nam łatwo przełączać się między lokalną i chmurową (Azure) pamięcią masową.Dołącz do strumienia CloudBlockBlob
do odczytu i zapisu plików mamy następujący członkowie:
Stream OpenRead();
Stream OpenWrite();
częścią naszej aplikacji „wiązek” dokumentów w jednym pliku. Dla naszego lokalnego dostawcy przechowywania OpenWrite
zwraca strumień appendable:
public Stream OpenWrite()
{
return new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite, BufferSize, useAsync: true);
}
Dla Azure BLOB możemy wykonać następujące czynności:
public Stream OpenWrite()
{
return blob.OpenWrite();
}
Niestety ta nadpisuje zawartość blob każdym razem. Czy można zwrócić zapisywalny strumień, do którego można dołączyć?
Tak właśnie zrobiłem. Zalecanym podejściem wydaje się być 'CloudBlockBlob.PutBlock', ale polegamy na bibliotece PDF, aby wykonać nasze" pakowanie ", które działa tylko z pojedynczym strumieniem wejściowym. –
'CloudBlockBlob.PutBlock' jest zalecany, ponieważ jeśli plik stanie się duży, to powyższe podejście nie będzie wydajne, ponieważ pobierasz cały obiekt typu blob i przesyłasz go ponownie. W "PutBlock" przesyłasz tylko dołączoną część. –
Tak, to jest poważną wadą * zastępowania * obiektu typu blob za każdym razem. Jednak, jak wspomniano, jesteśmy ograniczeni naszą biblioteką PDF. Możemy spojrzeć na buforowanie lokalnej kopii obiektu blob, jeśli stanie się to problemem. –