news 2026/4/16 12:45:25

Flask与Flutter:无缝上传与显示文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flask与Flutter:无缝上传与显示文件

在现代Web应用中,文件上传和显示功能是常见的需求。本文将介绍如何使用Flask作为后端和Flutter作为前端来实现一个文件上传到Azure Blob Storage并在前端显示的完整流程。

环境准备

首先,我们需要确保以下环境配置:

  • Python 3.7+
  • Flutter SDK
  • Azure存储账户
  • 安装必要的Python库:flask,flask_cors,azure-storage-blob
pipinstallflask flask_cors azure-storage-blob

Flask后端配置

1. 配置Azure存储

我们首先在Flask中配置Azure Blob Storage的连接:

fromazure.storage.blobimportBlobServiceClient,BlobClient,ContainerClient,generate_blob_sas,BlobSasPermissions connect_str='DefaultEndpointsProtocol=CONNECTION_STRING_ETC'container_name="documents"blob_service_client=BlobServiceClient.from_connection_string(conn_str=connect_str)container_client=blob_service_client.create_container(container_name)

2. 定义上传路由

定义一个上传文件的路由,处理文件上传到Azure Blob Storage:

@app.route('/upload',methods=['POST'])defupload_file():if'file'notinrequest.files:returnjsonify({"message":"No file available","status":"fail"}),400file=request.files['file']iffile.filename=='':returnjsonify({"message":"No selected file","status":"fail"}),400iffile:timestamp=datetime.now().strftime('%Y-%m-%d_%H:%M:%S')filename=secure_filename(f"{timestamp}_{file.filename}")blob_client=container_client.get_blob_client(filename)blob_client.upload_blob(file.stream,overwrite=True)file_url=blob_client.urlreturnjsonify({"message":"File uploaded successfully","status":"success","file_url":file_url}),200

3. 生成SAS Token

为了安全地访问文件,我们使用SAS Token来生成临时URL:

@app.route('/upload/<path:filename>',methods=['GET'])defuploaded_file(filename):blob_client=container_client.get_blob_client(filename)sas_token=generate_blob_sas(account_name=blob_service_client.account_name,container_name=container_name,blob_name=filename,account_key=blob_service_client.credential.account_key,permission=BlobSasPermissions(read=True),expiry=datetime.now(datetime.UTC)+timedelta(hours=1))signed_url=f"{blob_client.primary_endpoint}/{container_name}/{blob_client.blob_name}?{sas_token}"returnjsonify({"file_url":signed_url,"status":"success"})

Flutter前端实现

1. 接收文件URL

在Flutter中,我们需要从Flask获取文件的URL并显示:

Future<void>fetchFile()async{setState((){isLoading=true;});finalresponse=awaithttp.get(Uri.parse('http://127.0.0.1:5000/upload/$filename'));if(response.statusCode==200){vardata=jsonDecode(response.body);setState((){fileUrl=data['file_url'];isLoading=false;});}else{throwException('Failed to load file');}}

2. 显示文件

根据文件类型(PDF或图片)选择不同的显示方式:

WidgetbuildFileWidget(){if(isLoading){returnCenter(child:CircularProgressIndicator());}elseif(fileUrl!=null){if(fileUrl!.toLowerCase().endsWith('.pdf')){returnPDF().cachedFromUrl(fileUrl!);}else{returnCachedNetworkImage(imageUrl:fileUrl!,placeholder:(context,url)=>CircularProgressIndicator(),errorWidget:(context,url,error)=>Icon(Icons.error),);}}else{returnCenter(child:Text('File not found'));}}

调试与问题解决

  • 空白页面问题:检查fileUrl是否正确接收到了URL,确保Azure存储配置正确,CORS设置正确。
  • PDF显示问题:考虑使用flutter_pdfviewsyncfusion_flutter_pdfviewer,注意这些库的平台支持情况。

通过上述步骤,我们可以构建一个功能完备的文件上传和显示系统,利用Flask和Flutter的优势实现跨平台应用的开发。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:42:21

大数据领域中 Power BI 的优势及应用场景

Power BI在大数据领域的核心优势与场景化应用:从技术架构到业务价值的深度解析 关键词 Power BI、大数据分析、自助式BI、数据可视化、DAX建模、云原生整合、企业级数据驱动 摘要 在大数据(Volume、Variety、Velocity、Veracity、Value)时代,企业面临的核心挑战已从“如…

作者头像 李华
网站建设 2026/4/15 4:51:42

前后端分离光影系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

&#x1f4a1;实话实说&#xff1a;CSDN上做毕设辅导的都是专业技术服务&#xff0c;大家都要生活&#xff0c;这个很正常。我和其他人不同的是&#xff0c;我有自己的项目库存&#xff0c;不需要找别人拿货再加价。我就是个在校研究生&#xff0c;兼职赚点饭钱贴补生活费&…

作者头像 李华
网站建设 2026/4/15 18:54:54

跨风格迁移案例:用InstructPix2Pix将照片转为水彩/油画风效果

跨风格迁移案例&#xff1a;用InstructPix2Pix将照片转为水彩/油画风效果 1. 为什么说InstructPix2Pix是“听得懂人话”的修图师&#xff1f; 你有没有试过在修图软件里折腾半天&#xff0c;只为把一张普通照片变成水彩画&#xff1f;调色、加纹理、模糊边缘、反复蒙版……最…

作者头像 李华
网站建设 2026/4/12 13:25:59

GPEN开源模型部署:适配Jetson AGX Orin的边缘端人脸增强方案

GPEN开源模型部署&#xff1a;适配Jetson AGX Orin的边缘端人脸增强方案 1. 为什么在边缘设备上跑人脸增强&#xff1f;——从云端到桌面&#xff0c;再到指尖 你有没有试过用手机拍一张逆光人像&#xff0c;结果发现连眼睛轮廓都糊成一片&#xff1f;或者翻出十年前的老照片…

作者头像 李华
网站建设 2026/4/14 7:07:36

解锁UEFI美学:让开机画面成为个人数字签名

解锁UEFI美学&#xff1a;让开机画面成为个人数字签名 【免费下载链接】HackBGRT Windows boot logo changer for UEFI systems 项目地址: https://gitcode.com/gh_mirrors/ha/HackBGRT 问题&#xff1a;当开机画面成为数字身份的空白画布 想象两个场景&#xff1a;普通…

作者头像 李华