gpt4 book ai didi

java - 用Java将文件从服务器发送到客户端

转载 作者:行者123 更新时间:2023-12-04 06:33:42 24 4
gpt4 key购买 nike

我正在尝试找到一种将不同文件类型的文件从服务器发送到客户端的方法。

我在服务器上有这个代码将文件放入一个字节数组:

File file = new File(resourceLocation);

byte[] b = new byte[(int) file.length()];
FileInputStream fileInputStream;
try {
fileInputStream = new FileInputStream(file);
try {
fileInputStream.read(b);
} catch (IOException ex) {
System.out.println("Error, Can't read from file");
}
for (int i = 0; i < b.length; i++) {
fileData += (char)b[i];
}
}
catch (FileNotFoundException e) {
System.out.println("Error, File Not Found.");
}

然后我将 fileData 作为字符串发送给客户端。这适用于 txt 文件,但是当涉及到图像时,我发现虽然它可以很好地创建包含数据的文件,但图像无法打开。

我不确定我是否以正确的方式解决这个问题。
谢谢您的帮助。

最佳答案

如果您正在读/写二进制数据,您应该使用字节流 (InputStream/OutputStream) 而不是字符流,并尽量避免像您在示例中所做的那样在字节和字符之间进行转换。

您可以使用以下类将字节从 InputStream 复制到 OutputStream:

public class IoUtil {

private static final int bufferSize = 8192;

public static void copy(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[bufferSize];
int read;

while ((read = in.read(buffer, 0, bufferSize)) != -1) {
out.write(buffer, 0, read);
}
}
}

您没有提供太多有关如何与客户端连接的详细信息。这是一个最小的示例,展示了如何将一些字节流式传输到 servlet 的客户端。 (您需要在响应中设置一些 header 并适本地释放资源)。
public class FileServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Some code before

FileInputStream in = new FileInputStream(resourceLocation);
ServletOutputStream out = response.getOutputStream();

IoUtil.copy(in, out);

// Some code after
}
}

关于java - 用Java将文件从服务器发送到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5085105/

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