response.addheader怎么用?新手也能看懂的教程!

吉云

大家今天来跟大家分享一下我最近在项目里用到 `*` 的一些小经验。

事情是这样的,我们有个需求,需要用户点击一个按钮,就能下载一个文件。这文件,还得根据用户的操作动态生成,文件名也得按照用户的选择来变。我一开始想,这不简单吗?直接后端生成文件,然后返回文件流不就得?

结果,我发现事情没那么简单。我得告诉浏览器,我返回的这个东西是个文件,你得让用户下载,还得给文件起个名字。这时候,`*` 就派上用场。

response.addheader怎么用?新手也能看懂的教程!

我先是尝试直接把文件内容往 response 里一塞,结果浏览器直接把文件内容显示在页面上,根本没有下载的意思。这可不行,我得让它下载!

于是我开始研究怎么让浏览器乖乖下载。查一圈资料,发现原来得在 HTTP 的响应头(Response Header)里做文章。具体来说,就是得加两个东西:`Content-Type` 和 `Content-Disposition`。

我先加 `Content-Type`,告诉浏览器我返回的是个啥类型的文件。我这里用的是`application/x-msdownload`,表示是个需要下载的东西。代码大概是这样的:


*("Content-Type", "application/x-msdownload");

response.addheader怎么用?新手也能看懂的教程!

然后,我加上`Content-Disposition`,告诉浏览器怎么处理这个文件,顺便把文件名也给它。`Content-Disposition` 有两种方式,一种是 `inline`,表示直接在浏览器里打开;另一种是 `attachment`,表示作为附件下载。我这里当然得用 `attachment` !代码长这样:


*("Content-Disposition", "attachment;filename=" + filename);

response.addheader怎么用?新手也能看懂的教程!

  • filename 就是我要给文件的名字。

我把这两行代码往我的代码里一加,一运行,成!浏览器乖乖地弹出下载框,文件名也是我设置的那个。完美!

response.addheader怎么用?新手也能看懂的教程!

后来我又发现,`*` 不光能用来干这个,还能干好多别的事!比如说,控制页面多久刷新一次,或者让页面跳转到别的地方去。感觉打开新世界的大门!


*("REFRESH", "60;URL=newpath/*");

response.addheader怎么用?新手也能看懂的教程!

甚至可以强制浏览器弹出一个登录框:


* = "401 Unauthorized";

response.addheader怎么用?新手也能看懂的教程!

不过这些都是后话。这回主要就是解决文件下载的问题,`*`真是帮大忙!

,对,我还发现如果多次 `addHeader` 设置同一个 header 的名字,它会把这些值都给加上,而不是覆盖掉。如果想覆盖掉,得用 `setHeader` 才行。这个大家也注意一下。

今天的分享就到这里。希望对大家有所帮助!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]