我正在尝试通过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";
我似乎无法找到我缺少的部分...如何将图片加载到服务器?
答案 0 :(得分:1)
如果您正在接收HTTP请求,则必须发送HTTP响应,而不仅仅是图像文件的内容。您必须发送相应的HTTP标头,然后内容。
NB HTTP中的行终止符被指定为\r\n
,而不是\n
,更糟糕的是,您使用的是两者的混合。
答案 1 :(得分:-1)
尝试使用ImageIO API。
使用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);
)