• Node.js之文件下载


    Node.js之文件下载,主要最近解决我的一个需求。

    需求描述:
    如何将腾讯云上传的文件存储到本地某个目录下,如果用js来实现,纯JavaScript没有这样的功能(也许有),正好我这个项目用node.js比较多,正好可以利用node.js丰富的API实现该功能。

    如下示例代码,演示下载远程文件:

    源码如下(download.js):

    //下载参数
    var http = require("http");
    var fs = require("fs");
    var path = require("path");
    var downFlag = false;
    var downUrl = '';
    var downFileName = '';
    
    /**
     * 下载回调
     */
    function getHttpReqCallback (imgSrc, dirName, fileName) {
    
        var callback = function(res) {
            console.log("request: " + imgSrc + " return status: " + res.statusCode);
            var contentLength = parseInt(res.headers['content-length']);
            
            var downLength = 0;
        
            var out = fs.createWriteStream(dirName + "/" + fileName);
            res.on('data', function (chunk) {
                
                downLength += chunk.length;
                var progress =  Math.floor(downLength*100 / contentLength);
                var str = "下载:"+ progress +"%";
                console.log(str);
                
                //写文件
                out.write(chunk, function () {
                    //console.log(chunk.length);
                    
                });
                
            });
            res.on('end', function() {
                downFlag = false;
                console.log("end downloading " + imgSrc);
                if (isNaN(contentLength)) {
                    console.log(imgSrc + " content length error");
                    return;
                }
                if (downLength < contentLength) {
                    console.log(imgSrc + " download error, try again");
                    return;
                }
            });
        };
    
        return callback;
    }
    
    /**
     * 下载开始
     */
    function startDownloadTask (imgSrc, dirName,fileName) {
        console.log("start downloading " + imgSrc);
        var req = http.request(imgSrc, getHttpReqCallback(imgSrc, dirName, fileName));
        req.on('error', function(e){
            console.log("request " + imgSrc + " error, try again");
        });
        req.end();
    }
    
    startDownloadTask('http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.41/bin/apache-tomcat-8.5.41.tar.gz','D://1024Workspace//extension','apache-tomcat-8.5.41.tar.gz');
    
    //startDownloadTask('下载地址','本地存储路径','文件名');

    代码经过测试,没有问题。

    本文主要参考资料如下:
    Node.js文件下载

  • 相关阅读:
    图解插入排序
    图解冒泡排序
    break 和continue的两种用法
    循环的使用选择
    jstl标签库使用报错index_jsp.java找不到问题
    [Android 除錯] Conflict with dependency
    jQueryMobile 網頁使用 ASP.NET Web API 服務
    Chart.js 與 ASP.NET MVC 整合應用
    HTML5 新增的 input 事件
    ASP.NET MVC 5 實作 GridView 分頁
  • 原文地址:https://www.cnblogs.com/youcong/p/10957880.html
Copyright © 2020-2023  润新知