我有一个客户端页面,该页面将列出容器中的所有文件,选择文件后,文件名和容器名称将发送到服务器。服务器应启动文件下载并应发送文件作为对客户端请求的响应,请参考下图:
我尝试过get_blob_to_stream
@app.route("/blobs/testDownload/")
def testDownload():
container_name =request.args.get("containerName")
print(container_name)
local_file_name= request.args.get("fileName")
with BytesIO() as input_blob:
with BytesIO() as output_blob:
# Download as a stream
block_blob_service.get_blob_to_stream(container_name, local_file_name, input_blob)
copyfileobj(input_blob, output_blob)
newFile = str(output_blob.getvalue())
with open("file.txt","a") as f:
f.write(newFile)
f.close()
return send_file('file.txt',attachment_filename='sample.txt',as_attachment=True,mimetype='text/plain')
但是正在下载的文件只有文本文件格式,我想下载文件而不论其格式。而且我知道这不是通过Web API下载文件的正确方法。
[请为我建议一种方法
尝试使用以下方法:get_blob_to_path
而且,您可以尝试获取容器中每个blob文件的blob.name。 Blob名称包含文件扩展名(您只需对其进行解析),就可以将其用作上述方法的参数,并且您不必对其进行硬编码:在下面,您可以找到一个示例,该示例如何遍历容器中的文件并获取Blob名称:
block_blob_service = BlockBlobService(account_name=accountName, account_key=accountKey)
# create container if not exists called 'batches'
container_name ='batches'
block_blob_service.create_container(container_name)
# Set the permission so the blobs are public.
block_blob_service.set_container_acl(container_name, public_access=PublicAccess.Container)
# Calculation
blobs = block_blob_service.list_blobs(container_name)
for blob in blobs.items:
file_name = blob.name
所以现在您可以对'/'使用file_name和split方法,最后一项是filename.extension。