我试图从头开始构建一个简单的HTTP Java服务器。
现在我想让我的浏览器在我的电脑上下载一个.jpg文件,
这就是原因
fo image/jpeg
被硬编码到方法中。以下是将HTTP响应打印到我的浏览器的方法。 desiredFile
一个名为" Image.jpg"的.jpg文件存储在我的电脑上。
一切都很好,我的兄弟会下载文件,但我无法打开它。 Windows映像程序只是告诉我它可能已损坏"。当我查看图像的详细信息时,我可以看到它具有相同的字节大小,但丢失了诸如分辨率之类的细节。 `
byte[] bytes = Files.readAllBytes(desiredFile.toPath());
System.out.println("Attempting to print to client|" + bytes.length
output.write("HTTP/1.1 200 OK" + "\r\n"
+ "Content-type: image/jpeg" + "\r\n"
+ "Content-length: " + bytes.length + "\r\n"
+ "Content-Disposition: attachment; filename=Imae.jpg" + "\r\n"
+ "\r\n");
for (byte currentByte : bytes)
output.write(currentByte);
output.flush();
output.close();
System.out.println("Printing finished.");
`
我传输字节的方式有问题吗?将bytes
作为整个数组发送不起作用,这就是我发送每个字节的原因。
谢谢!
答案 0 :(得分:0)
我不是百分百肯定,但你可能会错过标题:
Accept-Ranges: bytes
答案 1 :(得分:0)
问题是您正在使用OutputWriter
。
您的字节将被解释为字符,而字符又被编码为不同的字节。例如,对于UTF-8,发送字节0x80
将导致两个字节0xC2 0x80
。这会破坏图像。
你无法直接发送完整阵列的事实是一个巨大的危险信号:这显然应该有效。如果它没有,你应该找出原因。错误消息可能提到它期望char[]
而不是byte[]
,表明您的源是基于字符的而不是基于字节的。
要解决此问题,请切换到PrintStream
。它允许您输出标题的String和正文的byte[]
。