You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Hono中使用serveStatic函数实现文件下载功能?

如何在Hono中实现静态文件下载服务

你的serveStatic配置存在问题,root参数不需要添加/*通配符,它应该指向静态文件所在的目录路径,而非带通配符的路径。下面给出两种正确的实现方式:

方式一:用serveStatic托管静态目录(对应Express的express.static)

这种方式适合直接托管整个静态文件夹,无需额外自定义逻辑:

import { Hono } from 'hono'
import { serveStatic } from '@hono/node-server/serve-static'
import path from 'path'

const app = new Hono()

// 正确配置静态文件服务
app.use('/files/*', serveStatic({
  root: path.join(__dirname, 'files') // 传入静态目录的绝对路径,不要加通配符
}))

// 启动服务器
import { serve } from '@hono/node-server'
serve({
  fetch: app.fetch,
  port: 3000
})

配置说明:

  • /files/*是路由匹配规则,所有以/files/开头的请求都会触发该中间件
  • root指定静态文件所在的目录,Hono会自动根据请求路径(比如/files/report.pdf)去该目录下查找对应文件并返回

方式二:自定义GET路由处理文件请求(对应Express的GET /files/:filename)

如果需要在返回文件前添加自定义逻辑(比如权限校验、日志),可以用这种方式:

import { Hono } from 'hono'
import path from 'path'

const app = new Hono()

// 自定义文件下载路由
app.get('/files/:filename', async (c) => {
  const filename = c.req.param('filename')
  const filePath = path.join(__dirname, 'files', filename)
  
  // 这里可以添加自定义逻辑,比如检查文件是否存在、权限验证等
  
  // 用Hono的sendFile方法返回文件
  return c.sendFile(filePath)
})

// 启动服务器
import { serve } from '@hono/node-server'
serve({
  fetch: app.fetch,
  port: 3000
})

说明:Hono的c.sendFile方法和Express的res.sendFile功能类似,会自动处理文件的MIME类型和下载响应。

内容的提问来源于stack exchange,提问作者Assaf Fogelman אסף פוגלמן

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 08:49:59