从nodejs服务器下载文件在客户端下载为损坏的文件

     2023-03-22     13

关键词:

【中文标题】从nodejs服务器下载文件在客户端下载为损坏的文件【英文标题】:Downloading files from nodejs server download as corrupted files on the client side 【发布时间】:2020-11-10 03:00:09 【问题描述】:

在客户端,它是一个反应应用程序。我设置了一个端点,我可以从中请求文件。然而,从 pdfs、pngs 到 excel 文件的每个文件在尝试从服务器下载时似乎都已损坏,无法成功打开这些文件中的任何一个。想知道是否有人对此有任何见解。一直找不到任何有效的方法。

后端和前端的代码见下文。

后端node.js

ChangeLogAttachment_read(req, res, id, file_path, file_type)
                    .then(resp => 
                        res.download(file_path, file_name, (error)=>
                            if(error) 
                                console.log("Error", error);
                            
                        );

                        // Tried these
                        // res.contentType(file_type);
                        // res.send(fs.readFileSync(file_path));
                        // res.send(resp)
                    )

                    .catch(err => 

                        err.location = 'Error in NS_Controller.changeLogAttachments read.';
                        log.error(err)
                    );

前端 - 反应

requestFile = (id, filePath, fileName , fileType)=> 
    let token = AuthUtils.getToken();

    let data = ;
    data['action'] = 'read';
    data['id'] = id;
    data['file_path'] = filePath;
    data['file_type'] = fileType;
    data['file_name'] = fileName;

    axios(
      url:  process.env.REACT_APP_HOST +
        process.env.REACT_APP_PORT + '/pbx/changelog/attachments',
      method: 'POST',
      headers: 
        Authorization: 'Bearer ' + token,
        responseType:'blob'
      ,
      timeout: 10000,
      data
    ).then(response=> 
      console.log("Response", response);

      const url = window.URL.createObjectURL(new Blob([response.data]));
      // const url = window.URL.createObjectURL(new Blob([response.data]));
      const link = document.createElement('a');
      link.href = url;
      link.setAttribute('download', fileName); //or any other extension
      document.body.appendChild(link);
      link.click();

    ).catch(error=> 
      console.log("Error", error);
      
    )

  

【问题讨论】:

【参考方案1】:

您应该将 axios headers 对象中的响应类型更改为“arraybuffer”

headers: 
        Authorization: 'Bearer ' + token,
        responseType:'arraybuffer'
      ,

来源:https://github.com/axios/axios/issues/448#issue-176993853

【讨论】:

【参考方案2】:

实际上能够解决它,因为响应类型 blob 必须位于标头之外,如下所示:


      url:  process.env.REACT_APP_HOST +
        process.env.REACT_APP_PORT + '/pbx/changelog/attachments',
      method: 'POST',
      responseType:'blob',
      headers: 
        Authorization: 'Bearer ' + token
      ,
      timeout: 10000,
      data
    

【讨论】:

节点在下载后写入损坏的.xlsx文件(代码片段)

我在服务器端使用“xlsx”模块。我的服务器从客户端获取.xlsx文件。使用multipart上传文件时效果很好。但是,当我尝试从Google云端硬盘或Dropbox下载文件时,我总是会收到损坏的.xlsx文件。从Google云端硬盘下载文件的功能。service.f... 查看详情

我们如何使用代理和 NodeJS 从 azure 存储下载 blob?

...接,以便在客户端下载应用程序。现在我想使用NodeJS代理服务器从使用blob服 查看详情

cURL 使用 PHP:将文件下载到客户端会导致文件轻微损坏

...的脚本,我使用PHP中的cURL成功地将JPG、PNG或PPT(x)文件从服务器下载到客户端。但是,当我打开以这种方式保存的任何PowerPoint文件时,我收到错误 查看详情

java下载pdf文件损坏

服务器上有个pdf文件,我使用流把它下载下来,过程是成功的,可打开文件时,报错,并且文件为0字节是不是没有设置下载文件的长度,导致下载来以后长度不一致损坏如下这段代码:response.addHeader("Content-Length", "... 查看详情

从服务器 PHP 下载后文件损坏

】从服务器PHP下载后文件损坏【英文标题】:BrokenfilesafterdownloadfromserverPHP【发布时间】:2015-07-0408:57:51【问题描述】:我有从服务器下载种子文件的脚本:header("Pragma:public");header("Expires:0");header("Cache-Control:must-revalidate,post-check=0,... 查看详情

从 expressJS (sendFile) 服务器下载文件到 VueJS,是不是返回损坏的文件?

】从expressJS(sendFile)服务器下载文件到VueJS,是不是返回损坏的文件?【英文标题】:DownloadingfilesfromexpressJS(sendFile)servertoVueJS,isreturningcorruptedfiles?从expressJS(sendFile)服务器下载文件到VueJS,是否返回损坏的文件?【发布时间】:2019-... 查看详情

在客户端下载压缩文件夹在角度+节点(MEAN)中不起作用

...时间】:2019-09-1813:43:56【问题描述】:我需要允许用户从服务器下载压缩文件夹。我设法进行了压缩,但是即使我尝试读取tar文件并将其发送到客户端以下载文件已损坏或仅保存文件夹中的一个文件(例如1/7)。我尝 查看详情

将客户端 Json 下载为 CSV

...题描述】:我使用angularJS前端框架和nodejs/express作为后端服务器来发送和接收JSON。后端向前端发送了一个大的JSON对象,我想知道是否可以从前端以CSV格式下载JSON对象。数据以json格式存储在范围变量中:$scope.data在角度控制器中... 查看详情

需要将数据从 NodeJS 服务器发送回 JQuery 客户端

】需要将数据从NodeJS服务器发送回JQuery客户端【英文标题】:NeedtosenddatabackfromaNodeJSservertoaJQueryclient【发布时间】:2013-12-2417:49:02【问题描述】:我正在尝试将一些文件和数据从NodeJS服务器发送回在JQuery中工作的客户端。我使用r... 查看详情

如何在nodejs中的单个服务调用中上传和下载文件?

...】:我可以通过邮递员上传文件并在两个不同的服务中从服务器下载文件..但我需要的是..在一次调用中我应该能够将文件上传到服务器,然后在执行一些操作后执行一些操作操作我应该能够自动下载文件。这是我的代码。 查看详情

下载的 zip 文件已损坏

...013:49:10【问题描述】:我正在尝试让用户使用以下代码从服务器下载zip文件:服务器:@RequestMapping(value="/get-shape-file",method=RequestMethod.GET)publicvoidgetFile(HttpServletRequestrequest,Ht 查看详情

如何从服务器端下载 zip 文件到客户端(django 做出反应)

】如何从服务器端下载zip文件到客户端(django做出反应)【英文标题】:Howtodownloadzipfilefromserversidetoclientside(djangotoreact)【发布时间】:2019-09-0101:59:12【问题描述】:在我的django服务器端,我有一个文件,它从s3下载一些文件,然... 查看详情

从服务器下载文件的最佳方法是啥

】从服务器下载文件的最佳方法是啥【英文标题】:Whatisthebestwaytodownloadfilefromserver从服务器下载文件的最佳方法是什么【发布时间】:2012-06-1008:20:44【问题描述】:我有一个有趣的任务,需要我从服务器(ASP.NET)将动态生成的文... 查看详情

使用 MobileVLCKit 在 iOS 上播放 AVI 索引损坏的视频文件

...题-该应用应该能够播放部分下载的视频。我无法直接从服务器流式传输视频,因为没有服务器,视频是使用P2P网络下载的。下载从文件开头开 查看详情

从 C# 中的 REST 服务下载文件

...:2020-12-0308:30:07【问题描述】:我正在尝试将文件保存到客户端的机器上。我想要求客户端选择下载位置。我有REST服务的端点,它返回要下载的文件。我正在尝试设置代码以使用另存为对话框下载从服务返回的文件。varUrl="https:... 查看详情

从服务器下载 PDF 文件到客户端

】从服务器下载PDF文件到客户端【英文标题】:DownloadaPDFfilefromtheservertoclient【发布时间】:2022-01-1304:35:48【问题描述】:我要做的是从服务器查找共享文件夹,并在目录中找到一个文件并将其下载到我的客户端桌面。从服务器... 查看详情

从服务器下载后打印pdf文件

】从服务器下载后打印pdf文件【英文标题】:Printpdffileafterdownloadedfromtheserver【发布时间】:2018-10-1103:28:13【问题描述】:我需要自动打印生成的pdf文件。首先,我在生成pdf文件后将其保存到服务器,然后将其下载到客户端计算... 查看详情

NodeJS:从用户 Google Drive 下载文件

】NodeJS:从用户GoogleDrive下载文件【英文标题】:NodeJS:DownloadfilefromusersGoogleDrive【发布时间】:2021-10-2407:12:29【问题描述】:嗨,这可能比实际更理论,但我迷路了,我无法想象我是唯一的。我尝试实现的是从现在到每天结束时... 查看详情