File 在Wicket中存储用户特定文件的最佳方式是什么?
我正在创建一个特定于用户的文件。该文件基本上是一个结果csv,用户可以选择下载或不下载。当用户离开页面或结束会话时,我希望能够删除此文件。处理这个问题的最佳方法是什么 目前我正在使用Java的File类File 在Wicket中存储用户特定文件的最佳方式是什么?,file,session,wicket,File,Session,Wicket,我正在创建一个特定于用户的文件。该文件基本上是一个结果csv,用户可以选择下载或不下载。当用户离开页面或结束会话时,我希望能够删除此文件。处理这个问题的最佳方法是什么 目前我正在使用Java的File类 谢谢 Wicket无法控制销毁会话。这是您正在使用的servlet容器所关心的问题 如果要在Wicket中创建文件,并在会话被破坏或用户想要注销时删除该文件,它有两个部分: 用户注销(在Wikcet中) 在WebSession(Wicket)中存储文件路径或文件引用 重写WebSession或A
谢谢 Wicket无法控制销毁会话。这是您正在使用的servlet容器所关心的问题 如果要在Wicket中创建文件,并在会话被破坏或用户想要注销时删除该文件,它有两个部分:
你不必首先写一个文件。动态创建内容并将其流回客户端。Wicket在包
org.apache.Wicket.request.resource
中有几个类可以帮助实现这一点
作为一个起点,看看和
您基本上是在WicketApplication.init()中装载资源:
而不是SomeResourceReference:
public class SomeResourceReference extends ResourceReference {
@Override
public IResource getResource() {
return new SomeResource();
}
}
最后在SomeResource中:
public class SomeResource extends AbstractResource {
@Override
public AbstractResource.ResourceResponse
newResourceResponse(Attributes attributes) {
// get the parameters
PageParameters parameters = attributes.getParameters();
final String param1 = parameters.get("param1").toStringObject();
AbstractResource.ResourceResponse response
= new AbstractResource.ResourceResponse();
response.setContentType("application/CSV");
response.setCacheDuration(Duration.NONE);
response.setCacheScope(WebResponse.CacheScope.PRIVATE);
response.setContentDisposition(ContentDisposition.INLINE);
response.setWriteCallback(new AbstractResource.WriteCallback() {
@Override
public void writeData(final Attributes attributes) throws IOException {
// create your data here
attributes.getResponse().write(dataAsString);
}
});
return response;
}
}
很好,这很有效。我将onValidate()重载为suggested。我还要试试伯特的建议。谢谢谢谢你,伯特!我将阅读给出的参考资料,看看是否可以实现这一点。我可能还会回来问一些问题。
public class SomeResource extends AbstractResource {
@Override
public AbstractResource.ResourceResponse
newResourceResponse(Attributes attributes) {
// get the parameters
PageParameters parameters = attributes.getParameters();
final String param1 = parameters.get("param1").toStringObject();
AbstractResource.ResourceResponse response
= new AbstractResource.ResourceResponse();
response.setContentType("application/CSV");
response.setCacheDuration(Duration.NONE);
response.setCacheScope(WebResponse.CacheScope.PRIVATE);
response.setContentDisposition(ContentDisposition.INLINE);
response.setWriteCallback(new AbstractResource.WriteCallback() {
@Override
public void writeData(final Attributes attributes) throws IOException {
// create your data here
attributes.getResponse().write(dataAsString);
}
});
return response;
}
}