当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Boot controller中返回映像并像文件系统一样服务

邹玄裳
2023-03-14

我已经尝试了Stackoverflow中给出的各种方法,也许我错过了什么。

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
@ResponseBody
@RequestMapping(value = "/Image/{id:.+}", method = RequestMethod.GET, consumes = MediaType.ALL_VALUE, produces = MediaType.IMAGE_JPEG_VALUE)
public ResponseEntity<byte[]> getImage(@PathVariable("id")String id) {
    byte[] image = imageService.getImage(id);  //this just gets the data from a database
    return ResponseEntity.ok(image);
}
Response response = given()
            .pathParam("id", "image1.jpg")
            .when()
            .get("MyController/Image/{id}");

assertEquals(HttpStatus.OK.value(), response.getStatusCode());
byte[] array = response.asByteArray(); //byte array is identical to test image

注释后的代码(设置内容类型,取出产生):

@RequestMapping(value = "/Image/{id:.+}", method = RequestMethod.GET, consumes = MediaType.ALL_VALUE)
public ResponseEntity<byte[]> getImage(@PathVariable("id")String id, HttpServletResponse response) {
    byte[] image = imageService.getImage(id);  //this just gets the data from a database
    response.setContentType(MediaType.IMAGE_JPEG_VALUE);
    return ResponseEntity.ok(image);
}

在浏览器中,这似乎只是给了一个字符串化的垃圾(我猜是字节到字符)。在Android中,它不会出错,但图像不会显示。

共有1个答案

宫俊远
2023-03-14

我相信这应该行得通:

@RequestMapping(value = "/Image/{id:.+}", method = RequestMethod.GET)
public ResponseEntity<byte[]> getImage(@PathVariable("id") String id) {
    byte[] image = imageService.getImage(id);
    return ResponseEntity.ok().contentType(MediaType.IMAGE_JPEG).body(image);
}

请注意,内容类型是为ResponseEntity设置的,而不是直接为HttpServletResponse设置的。

 类似资料:
  • 我正在开发一个Spring3.2.7应用程序,它将存储在数据库中的签名作为base64字符串通过spring控制器发送回用户浏览器,该控制器输出字节数组responseEntity。 下面是我的代码,这显然是工作之前,所以也许有一些配置变化,可能会导致这一点? 该图像正在浏览器中呈现,如下所示: 我没有更改这个类,我被告知它确实有效,我能够从两个字节数组创建图像,它们都很好,看起来是一样的,我能够

  • 我有一个灰色的选项,我必须完成才能完成一个项目。上面说

  • 我一直在关注这个(http://developer.android.com/google/play-services/setup.html#install)。它要求我为Android API17(或更高版本)安装谷歌API,但当我打开SDK Manager时,它看起来是这样的: 所以,我的问题是:这两个Google API是什么?这两者之间有什么区别?

  • 建立路径 # pathlib_operator.py import pathlib usr = pathlib.PurePosixPath('/usr') print(usr) usr_local = usr / 'local' print(usr_local) usr_share = usr / pathlib.PurePosixPath('share') print(usr_share)

  • 我正在尝试在CI服务器上设置多个目标(CentOS 64_x86),以进行自动化的Android应用程序测试,这将不顾一切地运行多个模拟器。从 http://dl.google.com/android/adt/adt-bundle-linux-x86_64-20130729.zip 中提取最新的SDK并运行后,android更新sdk --no-ui我想我应该正确安装所有现有组件,但发现了2个问题

  • 我试图在Linux Mint上运行一个android模拟器。 当我试图在模拟器上运行avd时,我得到以下错误。