search

Home  >  Q&A  >  body text

html5 - node.js下载失败,求大神解释

使用express框架下载文件,但是失败了,直接看代码

<!DOCTYPE html>
<html>
<head>
    <title>express 主页</title>
    <meta charset="utf-8">
    <script type="text/javascript" src="jquery.min.js"></script>
</head>
<body>
<p>
I love you!
</p>
<button>click there to download a pictutre</button>
<script type="text/javascript">
$(function(){
    $('button').click(function(){
            $.ajax({
                url:'/download',
                type:'get',
                success:function(result){
                    alert("Resquest has been received!");
                }
            })
    })
})

</script>

</body>
</html>

以下是node.js代码

    var express = require("express");
var app = express();

app.use(express.static('public'));
app.locals.title = "My app";
app.get("/",function(req,res){

console.log("resquest has been received!");

res.sendFile("public/index.html");
res.end();
})

app.get("/download",function(req,res){

    
    res.download('public/example.jpg','example.jpg',function(err){
        if(err)
            console.log(err);
        else
            console.log("download successfully");
    });
})
app.listen(3000);

console.log("OK");


求解疑

伊谢尔伦伊谢尔伦2785 days ago478

reply all(2)I'll reply

  • 高洛峰

    高洛峰2017-04-17 15:19:43

    I suggest writing your download button directly as

    <a href="/download" download>下载</a>

    http://www.expressjs.com.cn/4...
    Pay attention to the first parameter of the res.download method

    res.download('/report-12345.pdf', 'report.pdf', function(err){
      if (err) {
        // Handle error, but keep in mind the response may be partially-sent
        // so check res.headersSent
      } else {
        // decrement a download credit, etc.
      }
    });

    Then your image is too blurry even though it is large in size. . .

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-17 15:19:43

    index.html

    <!DOCTYPE html>
    <html>
    <head>
        <title>express 主页</title>
        <meta charset="utf-8">
        <script type="text/javascript" src="jquery.min.js"></script>
    </head>
    <body>
    <p>
    I love you!
    </p>
        <a href="/download" download>下载</a>
    </body>
    </html>
    

    node.js

    var express = require("express");
    var app = express();
    
    app.use(express.static('public'));
    app.locals.title = "My app";
    app.get("/",function(req,res){
    
    console.log("resquest has been received!");
    
    res.sendFile("public/index.html");
    res.end();
    })
    
    app.get("/download",function(req,res){
    
        res.download('public/example.jpg', 'example.jpg',function(err){
            if(err)
                console.log(err);
            else
                console.log("download successfully");
        });
    })
    app.listen(3000, function(err) {
      if(err) console.error(err);
      console.log("OK");
    });
    

    You can visit http://localhost:3000/download separately with a browser to see if it can be downloaded. You can directly 404 the background service and it is not ready yet. Let’s not do the joint debugging of the front and back ends.

    reply
    0
  • Cancelreply