图片上传保存的REST方法-InputStream处理成图片格式jpg、png
REST method for image uploading and saving - InputStream processing to image format jpg, png
我正在使用 Jersey(org.glassfish.jersey - 版本 2.22.2)- JAX-RS、Guice 和图片上传的实现方法:
@PUT
@Path("/image")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public ImageResponse putImage(@FormDataParam("image") InputStream uploadedInputStream) {
writeToFileWithOutputStream(uploadedInputStream);
return null;
}
private void writeToFileWithOutputStream(InputStream uploadedInputStream) {
try {
OutputStream out = new FileOutputStream(new File("xxx.jpg"));
int read = 0;
byte[] bytes = new byte[1024];
while ((read = uploadedInputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
当我使用 writeToFileWithOutputStream 方法写入文件时,我得到的文件不能作为图像打开。它包括:
------WebKitFormBoundary5PVRYeRUBBAFA9yi
Content-Disposition: form-data; name="image"; filename="images.jpg"
Content-Type: image/jpeg
/** image symbols **/
------WebKitFormBoundary5PVRYeRUBBAFA9yi
Content-Disposition: form-data; name=""
------WebKitFormBoundary5PVRYeRUBBAFA9yi--
如果我手动删除前 4 行,图像可以正常打开。
我尝试用 BufferedReader/Writer 处理它们,但由于
格式不正确
也尝试使用 ImageIO.read(inputStream) 但它 returns 无效。
处理接收到的图像 InputStream 并将其保存为图像(jpg、png 或其他格式)的最佳方法是什么?
1.代码:
当接收带有球衣的图像时,接收到的流不是 String 而是 InputStream,您可能会读到:
@OPTION
@Path("/image")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response putImag_opts(
@FormDataParam("image") InputStream stream,
@FormDataParam("image") FormDataContentDisposition fileDetail){
return Response.ok().build();
}
@PUT
@Path("/image")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response putImage(
@FormDataParam("image") InputStream stream,
@FormDataParam("image") FormDataContentDisposition fileDetail
) {
writeToFileWithOutputStream(stream);
//if ok...
return Response.ok().build();
}
信息:
- 对象 stream
是接收到的流,
- 对象 fileDetail
包含文件信息
2。依赖项:
另请检查您是否具有上传图片的正确依赖关系:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.22.2</version>
</dependency>
3。在您的应用程序中注册 class
在您的 App.class 球衣
中注册内容多部分
register(MultiPartFeature.class);
问题是因为不同的 Jersey 版本 - 外部 jar 库中的版本 1 和主项目中的 Jersey 2。在主项目中切换到 Jersey 1,现在无需额外处理即可正确保存和打开图像。此外,当 2 个参数一起使用时也不例外:
@FormDataParam("image") InputStream uploadedInputStream,
@FormDataParam("image") FormDataContentDisposition fileDetail
我正在使用 Jersey(org.glassfish.jersey - 版本 2.22.2)- JAX-RS、Guice 和图片上传的实现方法:
@PUT
@Path("/image")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public ImageResponse putImage(@FormDataParam("image") InputStream uploadedInputStream) {
writeToFileWithOutputStream(uploadedInputStream);
return null;
}
private void writeToFileWithOutputStream(InputStream uploadedInputStream) {
try {
OutputStream out = new FileOutputStream(new File("xxx.jpg"));
int read = 0;
byte[] bytes = new byte[1024];
while ((read = uploadedInputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
当我使用 writeToFileWithOutputStream 方法写入文件时,我得到的文件不能作为图像打开。它包括:
------WebKitFormBoundary5PVRYeRUBBAFA9yi
Content-Disposition: form-data; name="image"; filename="images.jpg"
Content-Type: image/jpeg
/** image symbols **/
------WebKitFormBoundary5PVRYeRUBBAFA9yi
Content-Disposition: form-data; name=""
------WebKitFormBoundary5PVRYeRUBBAFA9yi--
如果我手动删除前 4 行,图像可以正常打开。
我尝试用 BufferedReader/Writer 处理它们,但由于
也尝试使用 ImageIO.read(inputStream) 但它 returns 无效。
处理接收到的图像 InputStream 并将其保存为图像(jpg、png 或其他格式)的最佳方法是什么?
1.代码: 当接收带有球衣的图像时,接收到的流不是 String 而是 InputStream,您可能会读到:
@OPTION
@Path("/image")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response putImag_opts(
@FormDataParam("image") InputStream stream,
@FormDataParam("image") FormDataContentDisposition fileDetail){
return Response.ok().build();
}
@PUT
@Path("/image")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response putImage(
@FormDataParam("image") InputStream stream,
@FormDataParam("image") FormDataContentDisposition fileDetail
) {
writeToFileWithOutputStream(stream);
//if ok...
return Response.ok().build();
}
信息:
- 对象 stream
是接收到的流,
- 对象 fileDetail
包含文件信息
2。依赖项: 另请检查您是否具有上传图片的正确依赖关系:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.22.2</version>
</dependency>
3。在您的应用程序中注册 class
在您的 App.class 球衣
中注册内容多部分register(MultiPartFeature.class);
问题是因为不同的 Jersey 版本 - 外部 jar 库中的版本 1 和主项目中的 Jersey 2。在主项目中切换到 Jersey 1,现在无需额外处理即可正确保存和打开图像。此外,当 2 个参数一起使用时也不例外:
@FormDataParam("image") InputStream uploadedInputStream,
@FormDataParam("image") FormDataContentDisposition fileDetail