2
hdfsからファイルを提供する簡単な残りのAPIを作成しました(ファイルが大きく、ローカルにコピーしたくありません)。Spring Rest APIを使用してファイルが完全にダウンロードされたかどうかを確認する方法
ファイルのダウンロードが正常に完了した、つまりストリーム全体が読み込まれたという情報をログに記録したいと思いますが、わかりません。ファイルのダウンロードが開始されたという情報のみを記録できます。
私は何か助けていただきありがとうございます。
@Autowired
private FileDownloadService fds;
@RequestMapping(value = GET_FILE_PATH, method = RequestMethod.GET)
@Produces(MediaType.APPLICATION_OCTET_STREAM_VALUE)
public ResponseEntity getFileStream(@RequestParam("name") String name) {
LOG.info("Processing for filename: " + name);
try {
Path p = fds.getFilePath(name);
org.apache.hadoop.fs.FSDataInputStream is = fds.getFileStream(p);
return ResponseEntity.ok().header("Content-Disposition", "attachment; filename=\"" + p.getName() + "\"'").contentLength(fds.getFileLength(p))
.contentType(MediaType.APPLICATION_OCTET_STREAM).body(new InputStreamResource(is));
} catch (Exception e) {
LOG.error(e.getLocalizedMessage(), e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error");
} finally {
LOG.info("File: " + name + " download started");
}
}
これは便利です。ありがとうございました。しかし、私はまだファイルが完全にダウンロードされたかどうかを区別する方法を知らない、またはたとえば操作が中止されました。 – Luk
'ProxyInputStream'は実装' CountingInputStream'を持っています。これを使用してファイルサイズを 'close()'メソッドの読み込みバイト数と比較することができます – Andremoniy
ありがとうございました! – Luk