我有一个简单的Spring Boot微服务,负责向/从Google Cloud Storage上传、检索和删除图像。我的服务中的get请求有以下代码:
public StorageObject getImage(String fileName) throws IOException {
StorageObject object = storage.objects().get(bucketName, fileName).execute();
File file = new File("./" + fileName);
FileOutputStream os = new FileOutputStream(file);
storage.getRequestFactory()
.buildGetRequest(new GenericUrl(object.getMediaLink()))
.execute()
.download(os);
object.set("file", file);
return object;
}
这是我的控制器部分:
@GetMapping("/get/image/{id}")
public ResponseEntity<byte[]> getImage(@PathVariable("id") Long id) {
try {
String fileName = imageService.findImageById(id);
StorageObject object = gcsService.getImage(fileName);
byte[] res = Files.toByteArray((File) object.get("file"));
return ResponseEntity.ok()
.contentType(MediaType.IMAGE_JPEG)
.body(res);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("No such file or directory");
}
}
就在响应中获取图像而言,这一切都很好,但我的问题是,图像也会下载到项目的根目录中。许多图像将通过此服务上载,因此这是一个问题。我只想在响应中显示图像,而不需要下载它们。我试着玩代码,但没能让它按我想要的那样工作。
我建议改为流式下载,同时跳过FileChannel操作:
public static void streamObjectDownload(
String projectId, String bucketName, String objectName, String targetFile
) {
Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
try (ReadChannel reader = storage.reader(BlobId.of(bucketName, objectName));
FileChannel targetFileChannel = FileChannel.open(Paths.get(targetFile), StandardOpenOption.WRITE)) {
ByteStreams.copy(reader, targetFileChannel);
System.out.println(
"Downloaded object " + objectName
+ " from bucket " + bucketName
+ " to " + targetFile
+ " using a ReadChannel.");
}
} catch (IOException e) {
e.printStacktrace()
}
}
人们可以例如。从随机访问文件
中获取FileChannel
:
RandomAccessFile file = new RandomAccessFile(Paths.get(targetFile), StandardOpenOption.WRITE);
FileChannel channel = file.getChannel();
虽然Spring框架同样有一个GoogleStorageResources
:
public OutputStream getOutputStream()引发IOException,返回Google云存储文件的输出流。
然后从OutputStream
转换为int[]
(这可能是二进制或ASCII数据):
int[] bytes = os.toByteArray();
我试图从一个简单的文本文件中获取地址,这样不理解代码的人仍然可以添加/删除或更改地址。 Phpmailer工作完全正常,当我设置一个地址,直接写在代码中,甚至与数组和Foreach。 所以现在我有这个: mail.php: mail.txt: echo确实返回了两个地址,但是var在addAddress()行中似乎不起作用,我得到了一个常见的错误:Mailer error:您必须至少提供一个收件人
问题内容: 我需要一种从本地文件夹中获取所有图像的方法,以便在本地也可以运行演示文稿。由于这是不可能的,服务器将不会尝试从本地文件夹中获取图像。 我需要使用.js,因为它无法在本地PC上运行,因此无法使用.php(这样会更容易)。 说我需要从 学习中 获取所有图像 / 问题答案: 我认为您最好的选择是在Javascript中使用新的File API。是具有很多从文件系统读取文件的功能。 (代码从这
我正在google-app-Engine上运行一个应用程序。 尝试从google-cloud d-store上的pdf-file获取txt。 当我在本地运行代码时,它会成功,但当在appengine上运行时,它会在org上失败。pdfbox。例外情况。包装异常 这是我的代码: 代码在with-没有添加其他消息:( 从存储器下载—实际上成功了。如果我记录数据,我会得到如下结果: 现在有没有办法克服这
问题内容: 我需要从GCS存储桶中读取文件。我知道我必须使用GCS API /客户端库,但找不到任何与之相关的示例。 我一直在GCS文档中参考此链接: GCS客户端库。但是不能真正地削弱。如果有人可以提供一个真正有帮助的例子。谢谢。 问题答案: 好。如果您只是想从GCS中读取文件,而不是从PCollection中读取文件,而是从常规文件中读取文件,并且在使用GCS Java客户端库时遇到问题,还可
请不要使用“tika”作为答案。我已经尝试了这个问题的答案: 如何从PDF文件中提取文本? 我有这个PDF文件,https://drive.google.com/file/d/1aUfQAlvq5hA9kz2c9CyJADiY3KpY3-Vn/view?usp=sharing,我想复制文本。 输出为“提交日期:2019-10-21 16:03:36.093 |表单键:5544”,这只是文本的一部分
目前使用SWING实现一个JMenuBar,其中有两个不同的JMenu。一个叫做gameMenu,另一个叫做addMenuGame。 我在游戏菜单中有几个JMenuItems,都是用这个方法在我的界面控制器中实现的。 它所做的是从文本文件中读取每一行,并将其添加到JMenu,称为gameMenu。但是,我只能将actionlisteners添加到JMenu,而不能添加JMenuItem,即JMen