ファイルのアップロード機能が壊れているプロジェクトを引き継ぎました。ファイルがアップロードされたときに、その後、SQLテーブルダウンロード/ SQLテーブルに格納されたファイルを表示
public static byte[] saveAttachment(String filePath) throws IOException{
InputStream inputStream = new FileInputStream(filePath);
byte[] buffer = new byte[1048576];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
while((bytesRead = inputStream.read(buffer)) != -1){
output.write(buffer, 0 , bytesRead);
}
inputStream.close();
return output.toByteArray();
}
に保存されているように、現在それがBYTEARRAYに変換され、私は私が撮影したが、私はそれで働かなければならない、悲しいかなされたアプローチに同意すると言うことはできません。私の質問は、このファイルを表示して表示する方法です。
私はしかし私は、これは適切な/最適解であることを確認していない(動作しませんでした)
@OnEvent(component="viewAttachment")
private Object viewAttachment(){
final File getFile();
final OutputStreamResponse response = new OutputStreamResponse() {
public String getContentType() {
return "image/jpg";
}
public void prepareResponse(Response response) {
response.setHeader ("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
}
@Override
public void writeToStream(OutputStream out) throws IOException {
try {
InputStream in = new FileInputStream(file);
IOUtils.copy(in,out);
in.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
};
return response;
}
https://wiki.apache.org/tapestry/Tapestry5HowToStreamAnExistingBinaryFile
を読んで試してみました。
ファイルはバイト配列としてDBに格納されます。なぜクライアントのためだけにファイルに変換するのですか? DBからバイト配列からInputStreamを返すことができます。 – xl0e
@ xl0eはい、バイト配列として格納されます。これらのファイルをユーザーに表示するにはどうすればいいですか?ここでの機能は、任意のファイル形式にできるアップロードされた添付ファイルを表示することです。アップロード部分は問題なく動作します。 –