我试图从我的Express服务器下载文件。 我肯定文件在一个很好的位置。 它不会得到错误,但文件无论如何也不会下载。
节点:
const DOWNLOAD_FOLDER = 'downloads'
const IMAGES_FOLDER = 'images'
const express = require('express')
const fs = require('fs')
const app = express()
app.post('/', urlencodedParser, async (req, resp, next) => {
const filename = `test_file.zip`
const downloadUrl = `./${DOWNLOAD_FOLDER}/${filename}.zip`
if (fs.existsSync(downloadUrl)) {
resp.download(`${__dirname}/${downloadUrl}`, (err) => {
if (err) {
console.log(err)
} else {
console.log('success')
}
})
}
})
app.listen(5000).setTimeout(500000)
app.use(express.static(__dirname))
在控制台中,我看到一个控制台日志(“success”),但是我的浏览器没有下载文件。
反应:
const submitHandler = async (e) => {
e.preventDefault()
setLoading(true)
await fetch('http://localhost:5000/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ 'url': data.url})
})
.then((data) => {
console.log('data', data)
setLoading(false)
setData({ url: '' })
})
.catch(err => {
throw new Error(err)
})
}
我认为没有必要提出提取请求。 您可以通过请求带有要通过Express解析的文件名的路由来仅请求URL。 在客户端设置以下内容:
window.location = `http://localhost:5000/${data.url}`
在express端,您将方法从post
更改为get
。 您必须保持逻辑,以查看要动态解析的路由和文件。
(编辑,澄清说明)