如何通过可下载的 link 将文本保存为 .txt 文件?
How to save a text as .txt file via a downloadable link?
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+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'"
现在,我想通过 HTML link 将此信息保存为 .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 可下载 link?此外,文件应另存为 'reference.txt',引用被定义为上面的变量。
我想我已经找到了解决您问题的方法。虽然我不能完全确定,但它有两个原因。第一个在于下载link的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
属性的值并不都是蓝色的(在上面的 Whosebug 代码容器中)。那是因为中断字符串的"
,它关闭了href="
之后更早打开的"
。为了防止这种行为,您应该将 to_save
中的 "
替换为 "
。对于用户来说,这看起来与 "
相同,但浏览器会将其视为普通字符串。
您应该将以下代码行添加到您的 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)
希望对您有所帮助!如果没有,请评论。
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+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'"
现在,我想通过 HTML link 将此信息保存为 .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 可下载 link?此外,文件应另存为 'reference.txt',引用被定义为上面的变量。
我想我已经找到了解决您问题的方法。虽然我不能完全确定,但它有两个原因。第一个在于下载link的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
属性的值并不都是蓝色的(在上面的 Whosebug 代码容器中)。那是因为中断字符串的"
,它关闭了href="
之后更早打开的"
。为了防止这种行为,您应该将 to_save
中的 "
替换为 "
。对于用户来说,这看起来与 "
相同,但浏览器会将其视为普通字符串。
您应该将以下代码行添加到您的 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)
希望对您有所帮助!如果没有,请评论。