用于下载和上传大小分别为300-400 GB的媒体文件的内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于下载和上传大小分别为300-400 GB的媒体文件的内容相关的知识,希望对你有一定的参考价值。

  • 使用python和azure ubuntu VM。
  • 要求:想要下载2-400 GB范围内具有下载/上传进度栏状态的文件。当前正在将Azure Blob存储用于这些文件。

  • 我已经做了一些研究,这是我对这些的理解。如果我在任何地方都不对,请纠正我

我看到有两种方法可以做:

  • blobfuse:它类似于AWS的s3fs。对于这些,在执行任何操作之前,我必须在VM上装载和卸载数据。不能确定,但​​是这些会在VM上产生额外的成本。它还没有提供下载和上传的进度条。所以我看不出有什么用。

  • Python SDK(azure blob存储):在我检查时,AZURE给出了此SDK的两个版本(V11,V12)。不确定使用哪个。 V12是否具有所有这些功能?在版本V12中,无法使用进度条找到上载/下载方法。它模拟了此功能在V11(较旧的SDK)中可用。

我已尝试使用媒体文件大小为33 GB的V12库。借助boto3(AWS),文件下载花费了更多时间。因此对天蓝色斑点存储不满意。

请提供更好的解决方案。或我错过的东西。

我已经用以下代码测试了V12库。请让我知道您的建议。

class AzAuth:
    URL = "https://storage_account_name.blob.core.windows.net/"
    def __init__(self, storage_account_name, access_key):
        self.storage_account_name = storage_account_name
        self.access_key = access_key

    @property
    def resource_url(self):
        return self.URL.format(storage_account_name=self.storage_account_name)

class AzStorage(AzAuth):
    def __init__(self, storage_account_name, access_key):
        super().__init__(storage_account_name, access_key)
        self._blob_service_client = None

    def blob_service_client(self):
        if not self._blob_service_client:
            self._blob_service_client = BlobServiceClient(
                account_url=self.resource_url,
                credential=self.access_key
            )
        return self._blob_service_client

class AzBlobStorageContainer(AzStorage):
    def __init__(self, storage_account_name, access_key, container_name):
        super().__init__(storage_account_name, access_key)
        self.container_name = container_name

    def blob_container_client(self):
        blob_service_client= self.blob_service_client()
        return blob_service_client.get_container_client(
            self.container_name
        )

class AzBlobStorage(AzBlobStorageContainer):
    def __init__(self, storage_account_name, access_key, container_name=None, blob_name=None):
        super().__init__(storage_account_name, access_key, container_name)

        self.blob_name = blob_name
        self._blob_client = None
        self.properties = 
        self.blob_properties()

    def blob_client(self):
        if not self._blob_client:
            try:
                self._blob_client = self.blob_service_client().get_blob_client(
                    self.container_name, self.blob_name
                )
            except Exception as exception:
                raise exception
        return self._blob_client

    def blob_properties(self):
        if not self.properties:
            try:
                self.properties = self.blob_client().get_blob_properties()
            except Exception as exception:
                pass
        return self.properties

    def to_local_file(self,filename):
        filename = filename or self.blob_name
        if not isinstance(filename, LocalFile):
            local_file = LocalFile(filename=filename)
        local_file = LocalFile(filename=filename)
        return local_file

    def download(self, filename=None):
        local_file = self.to_local_file(filename=filename)
        blob_client = self.blob_client()
        filesize = round(self.properties.get("size", 0)/1024)
        dowloaded_filesize = 0
        with open(local_file.absolute_path, "wb") as f:
            dowloaded_filesize += blob_client.download_blob().readinto(f)

    def upload(self, filename):
        local_file=self.to_local_file(filename=filename)
        try:
            blob_client = self.blob_client()
            with open(local_file.absolute_path, "rb") as data:
                blob_client.upload_blob(data, overwrite=True)
            self.blob_properties()
        except ResourceExistsError as identifier:
            raise identifier
        except Exception as identifier:
            raise identifier
答案

我建议您使用AzCopy工具将大文件上传和下载到Azure存储。正式建议使用它,它支持并发性和并行性,并在中断时能够恢复复制操作。您也可以optimize performance以获得更高的速度。

以上是关于用于下载和上传大小分别为300-400 GB的媒体文件的内容的主要内容,如果未能解决你的问题,请参考以下文章

8080,8088,80286,80386的地址总线宽度分别为16根,20根,24根,32根,则它们的寻址能力分别为:64KB,1MB,16MB,4GB《汇编语言(第三版习题笔记)》

如何在 ASP.NET C# 中上传 10GB+ 大小的文件

请问哪里能下载AB500或AB5000的PLC软件(西门子200、300、400),最好能带授权的。

在vSphere中为虚拟机创建共享磁盘

是否有任何方法可以在服务器中调整图像大小而无需手动操作(上传或下载)

现在最主流的PLC是啥的