我试图将ezdxf实施到Flask Web应用程序中,在那里我尝试呈现文件并将其作为下载提供。
如果没有数据库,有可能吗? (如果没有,如何将saveas函数的文件目录更改为Web数据库?)
感谢Jan
答案 0 :(得分:0)
您可以通过write方法将DXF文件写入文本流,因此可以使用StringIO对象将DXF文件写入字符串。 StringIO.getvalue()
返回一个unicode字符串,如果您的应用需要二进制编码的数据,则必须使用正确的编码将其编码为二进制字符串。
DXF R2007(AC1021)和更高版本的文本编码始终为'utf8'
,对于较旧的DXF版本,所需的编码存储在Drawing.encoding
中。
import io
import ezdxf
def to_binary_data(doc):
stream = io.StringIO()
doc.write(stream)
dxf_data = stream.getvalue()
stream.close()
enc = 'utf-8' if doc.dxfversion >= 'AC1021' else doc.encoding
return dxf_data.encode(enc)
doc = ezdxf.new()
binary_data = to_binary_data(doc)
答案 1 :(得分:0)
更多信息和代码示例将有所帮助。您可以使用html A元素使用户能够从其浏览器下载文件。您必须将A元素的“ href”属性链接为dxf文件的内容。
这也是一个基于ezdxf信息的示例,也是基于以上的莫兹曼信息:
# Export file as string data so it can be transfered to the browser html A element href:
# Create a string io object: An in-memory stream for text I/O
stream_obj = io.StringIO()
# write the doc (ie the dxf file) to the doc stream object
doc.write(stream_obj)
# get the stream object values which returns a string
dxf_text_string = stream_obj.getvalue()
# close stream object as required by good practice
stream_obj.close()
file_data = "data:text/csv;charset=utf-8," + dxf_text_string
,然后将“ file_data”分配给href属性。我使用Dash-Plotly回调,并且可以根据需要为您提供有关如何执行此操作的代码。
或者您也可以在烧瓶路由中使用flask.send_file函数。这要求数据为二进制格式。
# The following code is within a flask routing
# Create a BytesIO object
mem = io.BytesIO()
# Get the stringIO values as string, encode it to utf-8 and write it to the bytes object
# Create a string io object: An in-memory stream for text I/O
stream_obj = io.StringIO()
# write the doc (ie the dxf file) to the doc stream object
doc.write(stream_obj)
# The bytes object file type object is what is required for the flask.send_file method to work
mem.write(stream_obj.getvalue().encode('utf-8'))
mem.seek(0)
# Close StringIO object
stream_obj.close()
return flask.send_file(
mem,
mimetype='text/csv',
attachment_filename='drawing.dxf',
as_attachment=True,
cache_timeout=0
)
如果您愿意,我可以为您提供更多信息,但是您可能需要提供一些代码结构,以了解您如何编码和传递数据。谢谢JF