当前位置: 首页 > 知识库问答 >
问题:

下载原始文件名的文件

秋光熙
2023-03-14

在我的项目中,我正在上传一个文件。上传时,我将其原始文件名和扩展名保存在数据库中,并将该文件与一些GUID一起保存在服务器上,生成的GUID也与文件名和扩展名一起存储在数据库中。

比如--

-用于上载的文件名为Questions.docx

-则orignalFileName将为“问题”

-文件扩展名将为“.docx”

-上传文件,文件名为“0C1B96D3-AF54-40D1-814D-B863B7528B1C”

上载工作正常。但是当我下载一些文件时,它以文件名作为GUID下载,在上面的情况下,它是“0c1b96d3-af54-40d1-814d-b863b7528b1c”。
我如何下载一个文件,它的原始文件名,即“questions.docx”。

已添加代码

    /**
     * code to display files on browser
     */
    File file = null;
    FileInputStream fis = null;
    ByteArrayOutputStream bos = null;

    try {
        /**
         * C://DocumentLibrary// path of evidence library
         */
        String fileName = URLEncoder.encode(fileRepo.getRname(), "UTF-8");
        fileName = URLDecoder.decode(fileName, "ISO8859_1");
        response.setContentType("application/x-msdownload");            
        response.setHeader("Content-disposition", "attachment; filename="+ fileName);
        String newfilepath = "C://DocumentLibrary//" + systemFileName;
        file = new File(newfilepath);
        fis = new FileInputStream(file);
        bos = new ByteArrayOutputStream();
        int readNum;
        byte[] buf = new byte[1024];
        try {

            for (; (readNum = fis.read(buf)) != -1;) {
                bos.write(buf, 0, readNum);
            }
        } catch (IOException ex) {

        }
        ServletOutputStream out = response.getOutputStream();
        bos.writeTo(out);
    } catch (Exception e) {
        // TODO: handle exception
    } finally {
        if (file != null) {
            file = null;
        }
        if (fis != null) {
            fis.close();
        }
        if (bos.size() <= 0) {
            bos.flush();
            bos.close();
        }
    }

这个代码是完美的吗?

共有2个答案

庞修贤
2023-03-14

您只需从数据库中获取原始名称并在content-disposition头中设置它:

@RequestMapping("/../download")
public ... download(..., HttpServletResponse response) {
  ...
  response.setHeader("Content-Disposition", "attachment; filename=\"" + original + "\"");
}
贲凌
2023-03-14

您应该将您的原始文件名设置到响应头中,如下所示:

String fileName = URLEncoder.encode(tchCeResource.getRname(), "UTF-8");
fileName = URLDecoder.decode(fileName, "ISO8859_1");
response.setContentType("application/x-msdownload");            
response.setHeader("Content-disposition", "attachment; filename="+ fileName);

希望能帮助您:)

 类似资料:
  • 我想下载一个文件,同时保留文件的文件名。 我有: 我可以下载文件,但我下载的文件名总是“downloadFile”。pdf或下载文件。巴布亚新几内亚'。 如何保留原始文件名?谢谢

  • 如果我们将此链接粘贴到Chrome或Safari,它将开始下载。 但问题是 null 添加&download=“mywork.fbx” 使用PHP头('content-disposition:attachment;filename=“mywork.fbx”');fbx文件名是我的,但是带宽也是我的,不仅仅是Google Drive!!! 检查堆栈溢出中的项目,但找不到正确的项目

  • 问题内容: 是否可以获取通过HttpURLConnection下载的文件的名称? 在上面的示例中,我无法从URL中提取文件名,但是服务器会以某种方式向我发送文件名。 问题答案: 您可以使用HttpURLConnection.getHeaderField(String name) 获取标头,该标头通常用于设置文件名: 正如其他答案指出的那样,服务器可能返回无效的文件名,但是您可以尝试使用它。

  • vue 下载文件流怎么保留原文件名? elink.download 怎么获取原文件名

  • 在edge中,我正在访问一个JSP页面,该页面会返回一个文件。它在chrome中工作得很好,但在Edge和Internetexplorer中,我会将mime类型附加到文件名中。 这是响应标头: Edge要求我保存文件,文件名是 persistenceIDs.xlsx.vnd.openxmlformats-officedocument.spreadsheetml.sheet 有什么想法吗?

  • 如何在Struts2中获得上传文件的原始文件名。目前我得到的是一个filename.tmp的文件名,而上传的文件是一个CSV,文件名与我得到的不同。这是JSP代码 下面是strut配置中的动作映射 Action类包含以下3个实例变量实例以及getter和setter 但是,未获取实际文件名,而和属性为。