如何正确地把服务器端返回的文件二进制流写入到本地保存成文件

举报
汪子熙 发表于 2022/07/31 10:56:57 2022/07/31
【摘要】 我使用 Node.js 的 request 工具库,请求服务器端的视频文件,保存到本地之后,发现了问题。我把 url 输入到浏览器里,手动下载视频文件后,文件大小为 70 多 KB:然而使用 Node.js 代码请求文件数据并保存到本地,发现文件尺寸变成 100 多 KB 了,显然不正确:经过研究发现,需要使用 request 在发起数据请求之前,添加如下一行语句:request.defau...

我使用 Node.js 的 request 工具库,请求服务器端的视频文件,保存到本地之后,发现了问题。

我把 url 输入到浏览器里,手动下载视频文件后,文件大小为 70 多 KB:

然而使用 Node.js 代码请求文件数据并保存到本地,发现文件尺寸变成 100 多 KB 了,显然不正确:

经过研究发现,需要使用 request 在发起数据请求之前,添加如下一行语句:

request.defaults({ encoding: null });

完整的数据请求的代码:

var requestC = request.defaults({ encoding: null });
        
        console.log("get video via url: " + url );
        const fileName = getVideoPartNameByUrl(url);

        requestC(getVideoOptions,function(error,response,body){
            if(error){
                console.log("error occurred: " + error);
                reject(error);
            }
            resolve({
                fileName: fileName,
                fileContent: body
            });
        }); 

文件写入的代码:

fs.writeFile(oVideo.fileName, oVideo.fileContent, "binary", function (error) {
        if(error)
            console.log("file writes error");
        else{
            console.log("File: ", oVideo.fileName, " writes ok");
        }
    });

之后问题消失。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。