用于下载和上传大小分别为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),最好能带授权的。