nodejs 開發(fā)http.request 發(fā)送steam流文件筆記

http.request 發(fā)送服務請求

http.request返回一個可寫流http.ClientRequest ,可以調(diào)用 req.write()發(fā)送到服務端,如果發(fā)送到是一個文件流,則需要設置文件頭'Connection': 'keep-alive'保持長鏈接,否則就只觸發(fā)一次data事件,只鏈接一次也是短鏈接到特性,'Connection': 'keep-alive'為http1.0標準,在實際開發(fā)中就碰到這樣一個問題,因為未設置keep-alive 服務端data只觸發(fā)了一次,而在fs.createReadStream中data事件里req.write第二次時報錯,因為如果不設置保持鏈接則默認為短鏈接,調(diào)用一次write后服務會自動調(diào)用end來關閉鏈接。

let option ={
          host:"127.0.0.1",   //請求host
          path:"/uploadFile",  //請求鏈接
          port:3000,            //端口
          method:"POST",  //請求類型
          headers:{。   //請求頭
            
                'Content-Type': 'application/octet-stream',  //數(shù)據(jù)格式為二進制數(shù)據(jù)流
                'Transfer-Encoding': 'chunked',  //傳輸方式為分片傳輸
                'Connection': 'keep-alive'。    //這個比較重要為保持鏈接。
          }
      }
      let req  = http.request(option);
                 
                 fs.createReadStream(path.join(__dirname,"line.png"))
                   .on("open",chunk=>{
                   })
                   .on("data",chunk=>{
                       req.write(chunk);  //發(fā)送數(shù)據(jù)
                   })
                   .on("end",()=>{
                      req.end();   //發(fā)送結束
                   })

服務端接收

ctx.req 拿到nodejs原始request值,因為reqeust被發(fā)送時是一個stream可讀流,所以可用data事件去監(jiān)聽。

  app.use(router.post("/uploadFile",(ctx,next)=>{
    //let data = fs.createReadStream(ctx)
       //ctx.req.setEncoding="binary";
       let url=path.join(__dirname,"/test/");
       let file = path.join(url,"node.tar.gz")
       let chunks='';
       
         ctx.req.on("data",function(d){
            let da = d.toString("utf8")
            debugger
         }).on("close",function(e){
            debugger
         }).on("error",function(){
             debugger
         }).on("end",function(){
             debugger
         })

       next();
}))
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容