我想公开一个API来将S3 bucket文件内容作为流下载给它的使用者。API URL类似于/downloadfile/**,即GET request。
这里是控制器伪代码,我写到现在,它给我406错误所有的时间。
@GetMapping(value = "/downloadfile/**", produces = { MediaType.APPLICATION_OCTET_STREAM_VALUE })
public ResponseEntity<Object> downloadFile(HttpServletRequest request) {
//reads the content from S3 bucket and returns a S3ObjectInputStream
S3ObjectInputStream object = null;
object = publishAmazonS3.getObject("12345bucket", "/logs/file1.log").getObjectContent();
return object
}
这里对这样做的方式和我做错了什么有什么建议吗?
通过使用Spring中的StreamingResponseBody
类,我可以将该文件作为流下载。
下面是我使用的代码:
@GetMapping(value = "/downloadfile/**", produces = { MediaType.APPLICATION_OCTET_STREAM_VALUE })
public ResponseEntity<S3ObjectInputStream> downloadFile(HttpServletRequest request) {
//reads the content from S3 bucket and returns a S3ObjectInputStream
S3Object object = publishAmazonS3.getObject("12345bucket", "/logs/file1.log");
S3ObjectInputStream finalObject = object.getObjectContent();
final StreamingResponseBody body = outputStream -> {
int numberOfBytesToWrite = 0;
byte[] data = new byte[1024];
while ((numberOfBytesToWrite = finalObject.read(data, 0, data.length)) != -1) {
System.out.println("Writing some bytes..");
outputStream.write(data, 0, numberOfBytesToWrite);
}
finalObject.close();
};
return new ResponseEntity<>(body, HttpStatus.OK);
}
测试流是否正确的方法是下载一个400MB左右的文件。通过传入vm选项将Xmx减少到256MB。现在,比较使用StreamingResponseBody
和不使用StreamingResponseBody
的下载功能,当使用传统的OutputStreams编写内容时,您将获得OutofMemoryError
我正在使用AngularJS和Spring编写应用程序。我想向服务器发送请求,并下载控制器返回的响应作为文件。在控制器中,我有csv文件的内容(作为字符串),即<代码>1;2.3.4(1行4列)。将此响应下载为文件的最简单方法是什么? 下面,我发布了我的简化代码。Spring控制器: 在javascript中(AngularJS) 我还试图写入响应流(如下所示),设置标题,但在客户端,我总是以字符
我想问一下,如何在SpringBoot中将文件夹作为资源或文件加载。假设我有src/main/resources/testfolder,我想做如下事情: ^但这将失败,因为ResourceUtils只能加载实际文件(.txt、.csv等),不是文件夹。。提前非常感谢。。 编辑: 原因是我需要得到文件夹的绝对路径... folderpath应该是“/workspace/intellij/Projec
问题内容: 似乎只能通过以下方式通过FTP上传文件: https://wiki.jenkins- ci.org/display/JENKINS/Publish+Over+FTP+Plugin 但是我需要通过FTP下载文件,为此我可以编写一个groovy插件,但是似乎没有这个插件 问题答案: 可能是因为在构建过程中使用单线下载文件很简单: 卷毛工具几乎可用于所有操作系统。 如果您只需要通过FTP下载
问题内容: 如何使用php将多个文件下载为zip文件? 问题答案: 您可以使用该类创建一个ZIP文件并将其流式传输到客户端。就像是: 并流式传输: 第二行强制浏览器向用户显示一个下载框,并提示名称filename.zip。第三行是可选的,但某些(主要是较旧的)浏览器在某些情况下会出现问题,而未指定内容大小。
我有一个Django视图(下载-附件),它返回一个Django.http.response.HttpResponse对象。
我有一个API可以返回excel文档作为响应。请求将是一个简单的JSON。 我搜索了谷歌,找到了一些代码库下载文件,我已经在我的应用程序中使用了它,但我得到了一些错误,无法找到它的解决方案。下面是我的代码库。 NameService.ts HTTPService.ts 使用上面的代码库,我得到了以下两个错误,文件没有下载。 null