如何从Blob下载文件并发送具有文件响应的文件

问题描述 投票:0回答:1

我有一个客户端页面,该页面将列出容器中的所有文件,选择文件后,文件名和容器名称将发送到服务器。服务器应启动文件下载并应发送文件作为对客户端请求的响应,请参考下图:

client download window

我尝试过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下载文件的正确方法。

[请为我建议一种方法

python azure blob downloadfile
1个回答
0
投票

尝试使用以下方法: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。

© www.soinside.com 2019 - 2024. All rights reserved.