如何通过可下载的链接将文本保存为 .txt 文件?
Posted
技术标签:
【中文标题】如何通过可下载的链接将文本保存为 .txt 文件?【英文标题】:How to save a text as .txt file via a downloadable link? 【发布时间】:2020-09-16 20:41:26 【问题描述】:HTML 新手在这里
我正在使用Streamlit 开发一个应用程序。根据用户对可用字段的输入,我正在生成一些我想以.txt
文件的形式下载的数据。
我要下载的数据是在我下载的时候生成的
to_save = abc.serialize().encode("ascii", "ignore")
当我执行print(to_save)
时,我得到(这只是非常庞大的文本数据的一小部分)
b"UNA:+.? 'UNB+UNOC:3+9978715000006:14+9978715000006:14+200529:1139+50582307060_WP?+_200101_200201++TL'UNH+1+MSCONS:D:04B:UN:2.3'BGM+7+5058230101_20_WP? 1+9'DTM+137:202005291139:203'RFF+Z13:13008'NAD+MS+9978715000006::9'CTA+IC+:迈克尔 Jordan'COM+m.jordan@energycortex.com:EM'NAD+MR+9978715000006::9'"
现在,我想通过 html 链接将此信息保存为 .txt
文件。我正在关注:
-
How to download a file in Streamlit
How to force fully download txt file on link?
我有
reference = 50582307060_WP+_200101_200201
to_save = abc.serialize().encode("ascii", "ignore")
href = f'<a href="data:text/plain;charset=UTF-8,to_save" download=reference.txt>Download File</a> (right-click and save as reference.txt)'
st.markdown(href, unsafe_allow_html=True)
但这不起作用,显示如下:
开始
结局
当我这样做时:
to_save = abc.serialize().encode("ascii", "ignore")
href = f'<a href="data:text/plain;charset=UTF-8" download=reference.txt>Download File</a> (right-click and save as reference.txt)'
st.markdown(href, unsafe_allow_html=True)
我明白了
问题在于必须保存为 .txt
文件 (to_save = abc.serialize().encode("ascii", "ignore")
) 的信息没有被保存,我得到了 Failed-Network error
我犯了什么错误,如何将to_save
(to_save = abc.serialize().encode("ascii", "ignore")
) 中存储的信息保存为 HTML 可下载链接?此外,该文件应保存为“reference.txt”,并在上面将引用定义为变量。
【问题讨论】:
仅用于调试目的:当您省略download=
属性和 <a>
标记中的值时,它是否有效?
【参考方案1】:
我想我已经找到了解决您问题的方法。虽然我不能完全确定,但它有两个原因。第一个位于下载链接的href
属性中。这里的问题是to_save
变量数据中的"
(双引号)。 html,对于我可以用你提供的数据进行测试,呈现如下:
<a href="data:text/plain;charset=UTF-8,b"UNA:+.? 'UNB+UNOC:3+9978715000006:14+9978715000006:14+200529:1139+50582307060_WP?+_200101_200201++TL'UNH+1+MSCONS:D:04B:UN:2.3'BGM+7+50582307060_WP?+_200101_200201-1+9'DTM+137:202005291139:203'RFF+Z13:13008'NAD+MS+9978715000006::9'CTA+IC+:Michael Jordan'COM+m.jordan@energycortex.com:EM'NAD+MR+9978715000006::9'"" download=filename.txt>Download File</a>
如您所见,href
属性的值并非全部为蓝色(此处位于上面的 *** 代码容器中)。那是因为"
打断了字符串,它关闭了href="
之后早先打开的"
。为了防止这种行为,您应该将to_save
中的"
替换为&quot;
。对用户来说,这看起来与"
相同,但浏览器会将其视为普通字符串。
您应该将以下代码行添加到您的 python 脚本中以实现这一点
to_save = abc.serialize().encode("ascii", "ignore")
#add this line:
to_save = to_save.replace('"','"')
接下来,download
属性的值周围没有任何双引号。它应该正式地看起来像这样:download="filename.txt". Then again, for safety replace any possible
"with
"`。
完整的 python 代码现在应该如下所示:
reference = 50582307060_WP+_200101_200201
reference = reference.replace('"','"')
to_save = abc.serialize().encode("ascii", "ignore")
to_save = to_save.replace('"','"')
href = f'<a href="data:text/plain;charset=UTF-8,to_save" download="reference.txt">Download File</a> (right-click and save as reference.txt)'
st.markdown(href, unsafe_allow_html=True)
希望这会有所帮助!如果没有,请评论。
【讨论】:
嘿@Chiel,感谢您的帮助。明天上班时我会检查它并更新你的信息。以上是关于如何通过可下载的链接将文本保存为 .txt 文件?的主要内容,如果未能解决你的问题,请参考以下文章