나는 꽤 일반적인 일이 될 것으로 기대하지만, 나는 어떤 정직한 대답도 찾을 수 없다. 그래서 여기있는 어떤 도움도 크게 감사 할 것이다.Wicket - 스트림을 통해 파일을 다운로드하는 방법?
짧은 버전 : SmbFile의 inputStream에서 IResourceStream을 만들려면 어떻게해야합니까?
긴 버전 : 내 Wicket 앱에서 사용자가 설문지를 작성한 다음 제대로 작성한 후 파일을 다운로드하도록합니다. 이 파일은 Samba 서버에 있으므로 SmbFile을 사용하고 있습니다. SmbFile은 완벽하게 작동하므로 아무런 문제가 없습니다. Sven Meier, Ernesto Barreiro 및 Jordi Deu-Pons이 작성한 AJAXDownload를 사용하고 있습니다. Ajax 기능을 사용하여 양식이 제대로 채워 졌는지 확인한 다음 다운로드를 시작해야하기 때문입니다. 내 컴퓨터에있는 파일을 밖으로 시작되었을 때, 나는 단순히
final AJAXDownload download = new AJAXDownload()
{
@Override
protected IResourceStream getResourceStream()
{
IResourceStream resStream = new FileResourceStream(file);
return resStream;
}
@Override
protected String getFileName() {
return fileName;
}
};
form.add(download);
를 사용할 수 있습니다하지만 지금은 JCIFS을 통해 SmbFile을 사용하고 있는지, 난 그냥 새로운 FileResourceStream 할 수 없습니다.
protected IResourceStream getResourceStream()
{
java.io.File tempFile = null;
try {
tempFile = File.createTempFile(smbFile.getName(), smbFile.getContentType());
} catch (IOException e1) {
e1.printStackTrace();
}
try {
Files.writeTo(tempFile, smbFile.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
IResourceStream resStream = new FileResourceStream(tempFile);
return resStream;
}
그리고이 작은 파일을 위해 잘 작동하지만 나 또한 것이다 : 나는이 smbFile의 inputStream을에서 임시 파일을 만들 java.io.File.createTempFile을 사용하여 다음과 같이 임시 파일을 사용할 수 있다는 것을 발견 약간 큰 파일을 가지고 있으며 파일을 보내기 전에 파일의 임시 복사본을 만들기 때문에 매우 오랜 시간이 걸리고 단지 디자인이 좋지 않습니다. wicket 앱에서 다운로드 한 smbFile을 어떻게 얻을 수 있는지에 대한 아이디어가 있습니까?
편집 :
final AJAXDownload download = new AJAXDownload()
{
@Override
protected IResourceStream getResourceStream()
{
IResourceStream resStream = new AbstractResourceStream() {
InputStream inStream;
public InputStream getInputStream() throws ResourceStreamNotFoundException{
try {
inStream = smbFile.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
return inStream;
}
public void close() throws IOException {
inStream.close();
}
public String getContentType() {
return smbFile.getContentType();
}
};
return resStream;
}
@Override
protected String getFileName() {
return smbFileName;
}
};
form.add(download);
정확히 그 것이 었습니다. 정말 고마워요! –