如何将Flask请求上传的STL文件传入numpy-stl实现无需存文件计算体积
解决方案
numpy-stl的Mesh原生支持从类文件对象加载数据,无需将文件落地存储,你只需要用BytesIO包装读取到的字节流,或是直接传入Web框架上传的文件对象即可:
完整代码示例
from io import BytesIO from stl import mesh # 方法1:直接使用请求中的文件对象(更省内存,推荐) upload_file = request.files['file'] stl_mesh = mesh.Mesh.from_file( filename=upload_file.filename, fh=upload_file ) # 方法2:基于你已读取的字节数据生成类文件对象 # file_bytes = request.files['file'].read() # file_like = BytesIO(file_bytes) # stl_mesh = mesh.Mesh.from_file(filename="temp.stl", fh=file_like) # 直接计算模型体积 model_volume = stl_mesh.get_volume()
注意说明
from_file方法的filename参数仅用来识别文件后缀判断格式,不会读取本地磁盘文件,你可以随意传入带.stl后缀的字符串,或是直接用上传文件的原始文件名- 如果确定上传的都是二进制STL文件,可以额外传入
mode='rb'参数跳过格式自动检测,提升加载速度 - 加载完成后直接调用
get_volume()方法就能拿到模型体积,后续按你的报价规则计算返回即可
内容的提问来源于stack exchange,提问作者zyx
相关产品推荐
相关产品推荐

