Java - 从服务器下载文件到我的位置时,文件名始终为“null”

Java - The name of the file is always 'null' when downloading it from server to my location

提问人:gbossa 提问时间:7/12/2023 更新时间:7/13/2023 访问量:81

问:

我有以下方法可以从服务器中的某个文件夹下载文件。

public DefaultStreamedContent downloadFiles(String s) {
    try {
        File file = new File(s);
        
        InputStream is = new DefaultStreamedContent(new FileInputStream(file), Files.probeContentType(file.toPath())).getStream();
        byte[] array = IOUtils.toByteArray(is);
        
        return new DefaultStreamedContent(new ByteArrayInputStream(array));
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

代码运行良好,因为文件夹中的文件下载正确(我检查了它的内容)。问题是:当浏览器下载并保存在本地的文件夹中时,文件名始终是 .这些文件应与服务器中存储的那些文件同名。假设要下载的原始文件是 。为什么下载时,文件名与我的文件夹相同?Downloadsnullserver\folder1\folder2\file.extensionnullDownloads

enter image description here

我以为 被假定为文件名,因此浏览器/操作系统将其保存为因为斜杠对文件名无效。file pathnull\

我该如何解决这个问题?

Java 文件 浏览器 下载

评论


答:

0赞 IveGotCodeButImNotACoder 7/13/2023 #1

你能试试这样的东西吗?不确定是否是必需的。Files.probeContentType(file.toPath()

    public DefaultStreamedContent downloadFiles(String s) {
    try {
        File file = new File(s);
        String filename = file.getName();
        
        InputStream is = new DefaultStreamedContent(new FileInputStream(file), Files.probeContentType(file.toPath())).getStream();
        byte[] array = IOUtils.toByteArray(is);
        
        return new DefaultStreamedContent(new ByteArrayInputStream(array), filename);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

评论

0赞 gbossa 7/13/2023
你好!感谢您的回答,但文件名仍然是.这是因为有很多不同的,所以我以天币方式得到它们。我还尝试通过将原始文件复制到另一个文件来创建一个没有任何文件的新文件,但仍然是同样的问题。nullFiles.probeContentType(file.toPath()content-typespath
0赞 gbossa 7/13/2023 #2

我用这个答案解决了我的问题。 我基本上复制了代码并适应了我的需求。所以,它工作得很好!