我想生成一个由用户自动或通过超链接下载的数据文件。
例如,对于 iJulia,是否有与这种 iPython 方法等效的方法?
如果我正确理解您的问题,您是否希望在 Jupyter Notebook 中自动生成一个链接,以便人们可以下载?如果是这样,我在 Vega.jl 中执行此操作(以便人们可以下载图形的 PNG 文件),其中包含以下内容:
window.setTimeout(function() {
var pnglink = document.getElementById(\"$divid\").getElementsByTagName(\"canvas\")[0].toDataURL(\"image/png\")
document.getElementById(\"$divid\").insertAdjacentHTML('beforeend', '<br><a href=\"' + pnglink + '\" download>Save as PNG</a>')
}, 20);
https://github.com/johnmyleswhite/Vega.jl/blob/master/src/render.jl#L65-L69
基本上,此代码找到输出所在的 div(在 Julia 代码运行时,在输出呈现之前已知),然后自动生成带有 PNG 的 base64 表示的 HTML 链接。根据您的内容,这显然可能会有所不同(因为该.toDataURL
方法必须在方法中包含您的文件类型)。
我把原来的FileLink
定义翻译成朱莉娅:
type FileLink
file_path::ByteString
end
type FileLinks
links::Vector{FileLink}
end
FileLinks(paths::Vector{ByteString}) = FileLinks(map(FileLink,paths))
function Base.writemime(st::IO, ty::MIME"text/html", fl::FileLink)
write(st, "<a href=$(fl.file_path) target='_blank'>$(fl.file_path)</a>")
end
function Base.writemime(st::IO, ty::MIME"text/html", file_links::FileLinks)
for fl in file_links.links
Base.writemime(st, ty, fl)
write(st,"<br>")
end
end
FileLinks(readdir("."))
在本地托管的 IJulia/IPython/Jupyter 服务器上工作,但您可能会遇到远程服务器(例如 Sage)的问题。
使用 NBViewer 为 Jupyter 笔记本提供静态服务也适用于 IJulia。
如其主页所示:
在此示例中,我为 NBViewer 提供了托管在 Gist 中的一个 IJulia 笔记本的链接,请注意 GitHub/Gist 现在也呈现 Jupyter 笔记本: