在做文件下载重命名时发现扩展名被改变,如何处理?

新手上路,请多包涵

问题描述

在做文件下载重命名时发现文件名本身自带.符号的话,.后面的文字会被识别成扩展名。
screenshot-20221028-182913.png
如上图,这本身是个pdf格式文件

问题出现的环境背景及自己尝试过哪些方法

自己尝试判断文件名是否有多个.符号分割,如果有多个,在最后一个.符号后面手动加上扩展名

相关代码

export const downloadFile = (fileUrl, fileName, errorCallback) => {
    try {
        const xhr = new XMLHttpRequest()
        xhr.open("get", fileUrl, true)
        xhr.responseType = "blob"
        xhr.send()
        xhr.onload = function () {
            if (this.status === 200 || this.status === 304) {
                if ("msSaveOrOpenBlob" in navigator) {
                    navigator.msSaveOrOpenBlob(this.response, fileName)
                    return
                }
                const blob = new Blob([this.response], {
                    type: xhr.getResponseHeader("Content-Type"),
                })
                const url = URL.createObjectURL(blob)
                if (fileName.split('.').length >= 2) {// 对于文件名以.结尾的会导致识别为扩展名
                    let ext = fileUrl.substring(fileUrl.lastIndexOf("."))
                    fileName = fileName + ext
                }
                simulateClick(blob, fileName, "_blank")
                URL.revokeObjectURL(url)
            }
        }
        xhr.onerror = function () {
            errorCallback && errorCallback()
        }
    } catch (error) {
        errorCallback && errorCallback()
    }
}

这样处理有个问题,如果取后台返回的文件名带有扩展名的话,会多添加一个扩展名(如xxxx.zip.zip)

你期待的结果是什么?实际看到的错误信息又是什么?

想问问是否有遇到过这种情况的朋友们,大家都是如何解决的这个问题的,有没有其他的解决办法

阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题