2016-11-04 80 views
0

我想将图像转换为byte[]并通过servlet发送。 我已经将图像转换为byte[],但发送给客户?如何通过servlet发送字节[] java

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 

    String name=request.getParameter("name"); 
    File f = new File("/Users/shilu/MyProject/Chat/Photo/" + name); 
    byte[] data = Files.readAllBytes(f.toPath()); 
    //What to do now?? 
} 
+0

什么样的形象? PNG,JPG ...? –

回答

1

这取决于图像的类型,因为您需要指定与您的图像类型匹配的content type

所以这里假设你要发送一个png,代码可能是这样的:

// Set the media type matching with my image 
response.setContentType("image/png"); 
// Write the data 
try (OutputStream out = response.getOutputStream()) { 
    out.write(data); 
} 
+1

虽然'flush()'是不必要的,因为隐式'close()'也会执行刷新。 – Kayaman

+0

@Kayaman我想知道是否需要它,我没有在[OutputStream#close()]的文档中清楚地看到它(https://docs.oracle.com/javase/8/docs/api/ java/io/OutputStream.html#close--),即使经验丰富,我也知道它会在必要时被刷新,但它可能是实现特定的,你不同意吗? –

+1

我会犹豫地说它是特定于实现的。我会说设计不好的流会丢弃字节而不是刷新它们,但是'OutputStream'没有指定任何行为。然而,'FilterOutputStream'实质上是所有自定义的'OutputStreams'的超类,它会在关闭时刷新并声明它是这样做的。在这种情况下,我不会为编写过分谨慎的代码而烦恼,但是YMMV。 – Kayaman