【问题标题】:Why the files downloaded from browser is corrupted?为什么从浏览器下载的文件损坏了?
【发布时间】:2019-11-19 14:43:51
【问题描述】:

我开始在 java 中创建一个 HTTP 服务器应用程序。当我尝试从浏览器下载文件时,文件大小增加了 1 个字节。并且文件没有打开。

内容长度:12345 原尺寸:12345 下载大小:12346

                        ResHead resHead = new ResHead(StatusCode.OK);

                        String responseHeader = resHead
                                                .addContentTypeFromFile(file.getName())
                                                .addContentLength(file.length())
                                                .getResponseHeader();

                        os.write(responseHeader.getBytes());


                        FileInputStream fileInputStream = new FileInputStream(file);

                        BufferedInputStream in = 
                            new BufferedInputStream(fileInputStream);

                            OutputStream out = new BufferedOutputStream(os); // for writing

                        System.out.println(file.length());
                        byte[] buffer = new byte[1024 * 50];
                        int len = 0;
                        while ((len = in.read(buffer)) >= 0) {
                                out.write(buffer, 0, len);
                        }
                        fileInputStream.close();
                        os.flush();

【问题讨论】:

  • 这能回答你的问题吗? Why a downloaded file can get corrupted?
  • 可能的换行翻译(从"\n""\r\n")?使用某种比较工具来找出文件之间的差异,以及单个额外字节是什么(并检查其周围的字节)。
  • @Royce 不是重复的。
  • 你应该刷新out,而不是os。最好在创建标题之前打开out,并在整个程序中使用它而不是os
  • try-with-resource 中包装您的流(输入和输出),您不必担心关闭它们。它会自动冲洗并关闭。

标签: java server network-programming client


【解决方案1】:

我通过将"\n\r" 替换为"\r\n" 解决了这个问题。谢谢。

【讨论】:

    猜你喜欢
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2011-08-06
    • 2023-04-10
    • 2021-07-13
    • 2012-05-12
    相关资源
    最近更新 更多