gpt4 book ai didi

java - 通过浏览器显示或下载图像

转载 作者:行者123 更新时间:2023-12-01 10:15:55 26 4
gpt4 key购买 nike

我有一个服务器,可以显示用户从浏览器请求的内容,我使用的是 Linux,当我运行服务器并使用此链接请求像 Image.png 这样的文件时 localhost:9999/Image.png 在 FireFox 上我收到此消息:

The image "localhost:9999/Image.png" cannot be displayed because it contains errors.

但是当我将变量 fileName 更改为 HTML 文件时,它可以正常工作,并且我可以可视化 html 页面。

我做错了什么?

这是我的服务器:

import java.io.*;
import java.net.*;
import java.util.Scanner;



public class Server {
public static void main(String args[]) throws IOException {
// Declarem les variables a utilitzar
ServerSocket serverSocket = null;
Socket socket = null;
InputStream inS = null;
OutputStream outS = null;

try
{
serverSocket = new ServerSocket(9999);
while(true)
{
socket= serverSocket.accept();
inS = socket.getInputStream();
outS = socket.getOutputStream();


try{
BufferedReader br = new BufferedReader(new InputStreamReader(inS));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outS));
System.out.println("THis is what the user wants = " + br.readLine());


String fileName = "Image.png";
String extension= "";
int i = fileName.lastIndexOf('.');
if (i > 0) {
extension = fileName.substring(i+1);
}
String dataReturn = "";
if(extension.equals("png"))
{

bw.write("HTTP/1.0 200 OK\r\n");
bw.write("Content-Type: image/png\r\n");
bw.write("\r\n");
FileReader myFilepng = new FileReader(fileName);
Scanner scanner1 = new Scanner(myFilepng);
dataReturn = "";
while(scanner1.hasNextLine()) {
dataReturn = scanner1.nextLine();
System.out.println(dataReturn);
bw.write(dataReturn);
}
scanner1.close();

}else{
if(extension.equals("html"))
{
bw.write("HTTP/1.0 200 OK\r\n");
bw.write("Content-Type: text/html\r\n");
bw.write("\r\n");
bw.write("<TITLE>"+fileName+"/TITLE>");

FileReader myFile = new FileReader(fileName);
Scanner scanner = new Scanner(myFile);
dataReturn = "";
while(scanner.hasNextLine()) {
dataReturn = scanner.nextLine();
System.out.println(dataReturn);
bw.write(dataReturn);
}
scanner.close();
}
}

bw.close();

}catch(Exception e)
{
}
}
}catch (IOException e) {
System.out.println(e);
}

inS.close();
outS.close();
socket.close();
}
}

最佳答案

您没有将 png 文件的内容写入 bw BufferedWriter。相反,您只需将响应的 header 发送给客户端。当您指示您的响应是 png 图像并且没有数据时,您的浏览器会告诉您该图像包含错误(事实上,它根本不包含任何内容)。

打开 png 文件名,将数据写入“bw”缓冲区以将其发送到客户端。这应该足够了。

编辑:

为此,请为您的“if”是图像尝试以下代码:

if(extension.equals("png"))
{
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
fis.read(data);
fis.close();

DataOutputStream binaryOut = new DataOutputStream(outS);
binaryOut.writeBytes("HTTP/1.0 200 OK\r\n");
binaryOut.writeBytes("Content-Type: image/png\r\n");
binaryOut.writeBytes("Content-Length: " + data.length);
binaryOut.writeBytes("\r\n\r\n");
binaryOut.write(data);

binaryOut.close();
}

请注意二进制流的使用与在 html 情况下使用的文本流的比较。

关于java - 通过浏览器显示或下载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35891427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com