提问者:小点点

从Express服务器下载文件


我试图从我的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)
    })
  }

共1个答案

匿名用户

我认为没有必要提出提取请求。 您可以通过请求带有要通过Express解析的文件名的路由来仅请求URL。 在客户端设置以下内容:

window.location = `http://localhost:5000/${data.url}`

在express端,您将方法从post更改为get。 您必须保持逻辑,以查看要动态解析的路由和文件。

(编辑,澄清说明)