在我的应用程序中,我用ByteArrayResource显示pdf。在我开始处理更大的文件之前,这一切都很顺利。到ByteArray的转换一直给我一个内存不足的错误。
我现在就是这样做的:
File myPdf=new File(thePath);
FileInputStream fin = new FileInputStream(myPdf);
final byte fileContent[] = new byte[(int)myPdf.length()];
fin.read(fileContent);
fin.close();
ResourceReference rr = new ResourceReference(dePdf.getName()) {
@Override
public IResource getResource() {
return new ByteArrayResource("Application/pdf", fileContent);
}
};
if (rr.canBeRegistered()) {
getApplication().getResourceReferenceRegistry().registerResourceReference(rr);
}
return wmc;有更好的方法显示大文件吗?
发布于 2012-09-12 10:14:03
尝试使用ResourceStreamResource和FileResourceStream:
File myPdf=new File(thePath);
FileResourceStream frs = new FileResourceStream(myPdf);
ResourceStreamResource rsr = new ResourceStreamResource(frs);
rsr.setContentDisposition(ContentDisposition.ATTACHMENT);
rsr.setFileName(fileName);
//the same code for resource reference creation and registration
//...发布于 2012-09-12 10:13:53
不完全确定(我从未真正使用过它们),但ContextRelativeResource可能是一种选择。也许是这样的:
final File myPdf=new File(thePath);
ResourceReference rr = new ResourceReference(dePdf.getName()) {
@Override
public IResource getResource() {
// You'll need to adjust the path here to be relative to your context
return new ContextRelativeResource(myPdf.getAbsolutePath());
}
};
if (rr.canBeRegistered()) {
getApplication().getResourceReferenceRegistry().registerResourceReference(rr);
} https://stackoverflow.com/questions/12385635
复制相似问题