如何使这些链接在node.js中单击时下载文件?
我是新来的节点,我真的卡住了。
我试图让我的networking服务器在当前目录中查找文件,并将其作为链接显示在浏览器中,以便我可以下载它们。
但是,文件列表只是随每个请求更新并反复显示。 我不能使用任何框架或外部组件,我已经坚持了两天。 我真的做了大量的研究,并尝试了很多东西,仍然无法正常工作。
我将在下面添加我最后一次尝试的代码,如果任何人都可以帮助我,甚至一点点的信息,这将是最感激的。 谢谢!
var http = require("http"); var fs = require("fs"); var currentServerDir = "."; var port = 8080; var content = ""; var server = http.createServer(handlerRequest).listen(8080); function handlerRequest(request, response) { fs.readdir(currentServerDir, function getFiles(error, items) { items.forEach(function getItems(item) { content += "<br><a href= " + "\" " + item + "\" " + ">" + item + "</a><br>"; }); }); response.writeHead(200, { 'Content-Type': 'text/html' }); response.write(content); response.end(); }
编辑:
我跟着Node.js生成html
并从那里借用了一些代码。 现在我可以点击一个文件,而不是下载或查看它只是说“未定义”。
var http = require('http'); var content function getFiles() { fs.readdir(currentServerDir, function getFiles(error, items) { items.forEach(function getItems(item) { content+= "<br><a href= " + "\" " + item + "\" " + ">" +item + "</a><br>"; }); }); } http.createServer(function (req, res) { var html = buildHtml(req); res.writeHead(200, { 'Content-Type': 'text/html', 'Content-Length': html.length, 'Expires': new Date().toUTCString() }); res.end(html); }).listen(8080); function buildHtml(req) { var header = ''; var body = content; return '<!DOCTYPE html>' + '<html><header>' + header + '</header><body>' + body + '</body> </html>'; };
你的代码中有几个问题。
- 您永远不会调用
getFiles()
导致content
永远不会被填充 - 如果你调用
getFiles()
,那么最终的content
仍然是空的,因为你使用了fs.readdir()
。 这是一个asynchronous函数,在用来构buildhtml页面之前将不能填充content
。 - 你处理每个请求到你的服务器是一样的,所以你将无法下载任何文件,因为你总是只显示你的页面。
您可以通过使用AlexS发布的问题来解决前两个问题。 第三个将需要更多的设置,但是如果你使用Express,可以变得简单。
您可以将download
标签添加到您的HTML链接:
items.forEach(function getItems(item) { content+= "<br><a href= " + "\" " + item + "\" " + " download>" +item + "</a><br>"; });
MDN参考
如果你不关心浏览器的支持,你可以使用标签中的下载属性。 它看起来像这样:
<a href="test.html" download="nameOfFileAfterDL">DL me!</a>
支持Firefox 14+和Chrome 20+
但是,如果你想要一个通用的解决scheme,那么你可以在发送文件之前压缩文件,据我所知,.zip总是在“点击它们”时被下载。
您可以使用节点zip或归档器来压缩文件。