项目需要通过Java中的套接字发送html文件。我设法让文本显示在浏览器中,但没有任何图片加载。我在网上找到这个代码,帮我发送html文件,但我想知道是否有任何方式发送图片。我将所有图像都放在img
文件夹中,这是html
文件所在的位置。
public class SimpleFileServer {
public final static int SOCKET_PORT = 9000; // you may change this
public final static String FILE_TO_SEND = "D:\\Project 2\\index.html"; // you may change this
public static void main (String [] args ) throws IOException {
FileInputStream fis = null;
BufferedInputStream bis = null;
OutputStream os = null;
ServerSocket servsock = null;
Socket sock = null;
try {
servsock = new ServerSocket(SOCKET_PORT);
while (true) {
try {
sock = servsock.accept();
// send file
File myFile = new File (FILE_TO_SEND);
byte [] mybytearray = new byte [(int)myFile.length()];
fis = new FileInputStream(myFile);
bis = new BufferedInputStream(fis);
bis.read(mybytearray,0,mybytearray.length);
os = sock.getOutputStream();
os.write(mybytearray,0,mybytearray.length);
System.out.println("Done.");
} finally {
if (bis != null) bis.close();
if (os != null) os.close();
if (sock!=null) sock.close();
}
}
} finally {
if (servsock != null) servsock.close();
}
}
}
答案 0 :(得分:1)
您确定您的项目还不需要您解析HTML并单独请求图像吗?这听起来像是在模拟Web服务器之类的东西。一般来说,浏览器会下载页面的HTML,解析它,然后向页面中包含的每个图像或其他资源(CSS,场外Javascript等)发送后续请求到服务器。
每个资源执行一个请求也可以简化您的服务器,因为它只需处理当时请求的资源,这会将一些逻辑和复杂功能推回到客户端,以便能够知道要询问哪些资源对
HTTP 2中的情况有所改变,但这可能是你问题范围之外的另一个问题。
答案 1 :(得分:0)
通常,图像文件不包含在html下载中,但随后会在解析html文件时请求。通过更正标签中的src位置,可能可以解决为什么图像未在您的情况下显示的问题。如果您确实需要一起下载所有内容,我建议您发送.zip存档
答案 2 :(得分:0)
我认为您正在尝试在网络浏览器中实现“另存为”功能。
您需要单独保存html文件以及图像文件,嵌入内容等资源。
由于你已经有了img文件夹中的图像,你需要改变html中图像标签的src属性 - 从图像文件夹中选择图像。