我想让用户从服务器下载文件。 我looked up寻求解决方案,并尝试举一个例子时,结果如下:
@Route("test-download")
public class Download extends VerticalLayout {
public Download() {
Anchor downloadLink = new Anchor(createResource(), "Download");
downloadLink.getElement().setAttribute("download", true);
add(downloadLink);
}
private AbstractStreamResource createResource() {
return new StreamResource("/home/johny/my/important-file.log", this::createExportr);
}
private InputStream createExportr(){
return null;
}
}
当我在浏览器中转到该页面时,会给出java.lang.IllegalArgumentException: Resource file name parameter contains '/'
。
如何使下载按钮(或锚点)知道磁盘上的文件位置?
答案 0 :(得分:1)
看看documentation的“使用StreamResource”段落。第一个参数只是文件名,浏览器将使用该文件名在下载时向用户建议该文件名。因此,您可以像"important-file.log"
一样传递它。下载的内容由InputStream
参数提供。例如,您可以从文件中读取内容,请参见here:
File initialFile = new File("src/main/resources/sample.txt");
InputStream targetStream = new FileInputStream(initialFile);