通过byte []通过java服务器发送文件

时间:2018-05-20 07:26:37

标签: java sockets http web

我正在尝试通过Java服务器套接字发送文件(html,css和images)。我能够发送html和css,除了图像..

ServerSocket ssocket = new ServerSocket(8888);
Socket socket = ssocket.accept();
File fp = new File(file);
byte[] arrByte = new byte[4096];            
FileInputStream fis = new FileInputStream(fp);
OutputStream os = socket.getOutputStream();

int count;
while((count = fis.read(arrByte)) > 0 ) {
    os.write(arrByte, 0, count);                
}

我的客户端(接收方)是Web服务器。以下是我的回复标题:

        header = "HTTP/1.1 200 OK \n" + 
                "Connection: close \n" + 
                "Date: " + new Date().toString() + " \n" +
                "Content-Type: image/jpg \n" + 
                "Content-Length: " + fp.length() + " \n" + 
                "\r\n";

我似乎无法找到我缺少的部分...如何将图片加载到服务器?

3 个答案:

答案 0 :(得分:1)

如果您正在接收HTTP请求,则必须发送HTTP响应,而不仅仅是图像文件的内容。您必须发送相应的HTTP标头,然后内容。

NB HTTP中的行终止符被指定为\r\n,而不是\n,更糟糕的是,您使用的是两者的混合。

答案 1 :(得分:-1)

尝试使用ImageIO API。

  • 通过ImageIO
  • 读取图像字节
  • 使用ImageIO转换并将其写入间歇性ByteArrayOutputStream
  • 使用ImageIO从间歇性ByteArrayOutputStream写入套接字

    InputStream in = new FileInputStream(new File(file));
    BufferedImage imageBytes = ImageIO.read(in);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    OutputStream os = socket.getOutputStream();
    ImageIO.write(imageBytes, "png", baos );
    byte[] outBytes = baos.toByteArray();
    os.write(outBytes, 0, out.length);
    

答案 2 :(得分:-1)

在我看来,您没有关闭流,因此并非所有字节都必须写入客户端。使用try-with-resources结构确保OutputStream关闭。如果您使用Java 7或更高版本,则可以使用Files.copy复制流。

 Path path = Paths.get(file);
 try (OutputStream os = socket.getOutputStream()) {
     Files.copy(path, os);
 )