超详细的实现下载功能教程,文件下载实现。

20 篇文章 0 订阅
16 篇文章 0 订阅

重要声明:本文章仅仅代表了作者个人对此观点的理解和表述。读者请查阅时持自己的意见进行讨论。

本文不及时更新,请到原文地址查看:《超详细的实现下载功能教程,文件下载实现。》。

文件下载功能对任何项目来说基本上是一个刚需。本文将详细的介绍如何实现文件下载功能。注意,文件下载有涉及后台的部分,本文将以java后台做介绍。如果你不是使用的java,没有关系。本文将带你了解下载的实现原理,了解了之后无论什么后台语言,都能够同样使用这个原理。

一、如何才能开始下载?

实际上你的每一次浏览器访问行为,都是在下载数据。只是当你打开的是一个html页面时,浏览器自己清楚这是你要立即观看的界面,而不是一个要另存为的文件,即便这样,当你右击页面,选择另存为时也依然会弹出目录让你选择一个位置来保存这个页面。

我们要做的事情就是,让浏览器不要去管返回的数据,而是自动弹出一个文件保存弹框出来。

这是由http协议的head控制的。Content-Disposition 字段表示了这是一个下载响应,通常针对下载响应,浏览器则会弹出文件保存框。因此,要实现下载文件的功能,你只需要在返回数据时,为其head中返回合适的 Content-Disposition 内容,就可以开始下载了。

如果对http协议还不是很了解,可以先阅读《【HTTP,Java】认识HTTP协议,在互联网世界里翱翔。》

二、Content-Disposition

Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。当 Internet Explorer 接收到头时,它会激活文件下载对话框,它的文件名框自动填充了头中指定的文件名。(请注意,这是设计导致的;无法使用此功能将文档保存到用户的计算机上,而不向用户询问保存位置。)。

它的值必须是有一定的格式的,不可以随便乱写。它的值分为2部分,不妨先看图了解下:

如果要进一步了解此字段,可以查看规范 RFC6266

在下载文件的同时,告诉浏览器文件类型,也是非常有必要的。因此,在响应头里,常常还会有 Content-Type 来说明文件的类型。

三、触发下载

有了以上知识,我们便可以轻松的实现下载链接(下文介绍)。现在要触发下载,只需要浏览器打开这个下载链接便可以完成。通常可以通过下面的方式来触发。

1、使用a标签

a标签是链接跳转的标准标签。但如果你的链接是一个下载链接,不用担心页面会被重新覆盖,下载链接只会弹出保存提示,而对页面没有影响。

<a href="https://xxx.xxx.xxx/download.mp3">点击下载</a>
2、使用JavaScript

在js里只需要为href赋值即可完成:

window.location.href="https://xxx.xxx.xxx/download.mp3";

四、下载链接(下载接口)实现

实际上大多数下载链接,我们都是不需要写的,因为多数情况下文件使用了类似七牛云来托管,只要上传了文件,下载链接就已经自动帮你生成好了。而有些场景,比如导出系统自己的业务数据为文件。这种需求来了的时候,不得不动手来实现一个可以下载的后台接口了。

下面示列一个下载接口:

// 典型的一个下载接口。
@RequestMapping(value = "/downloadFile")
public void downloadSysFile(HttpServletResponse response) throws Exception{

    // 拿到响应输出流
    ServletOutputStream outputStream = response.getOutputStream();

    // 构建要输出给客户端的数据
    File f = new File("D:/testfile.mp3");

    // 设置响应数据需保存为文件,同时指定下载信息。
    response.setContentType("audio/mp3");
    response.setContentLengthLong(f.length());
    response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("UTF-8", f.getName()));

    // 典型的流操作代码
    FileInputStream fi = new FileInputStream(f);
    byte[] data = new byte[1024];
    int dataSize = 0;
    while ((dataSize = fi.read(data)) != -1) {
        outputStream.write(data, 0, dataSize);
    }
    outputStream.flush();
    fi.close();
}

具体下载内容不同要根据自己的业务需求而定义。上述代码只是一个示列效果。

五、总结

互联网开发离不开http协议。这一切的功能实现都是基于http协议的了解。因此掌握http协议规范是非常迫切的一项技能。

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在uni-app中引入百度地图,可以通过以下步骤实现: 步骤一:添加百度地图插件 1. 打开HBuilderX开发环境,在项目目录下的manifest.json文件中找到"uniPlugins"字段。 2. 在"uniPlugins"字段中添加以下代码: ```json { "name": "@dcloudio/pdfjs", "version": "1.0.0", "provider": "dcloudio" } ``` 3. 保存文件,等待HBuilderX自动安装依赖。 步骤二:创建百度地图组件 1. 在pages目录下新建一个名为"map"的文件夹,并在该文件夹下创建一个名为"map.vue"的组件文件。 2. 在"map.vue"文件中引入百度地图的组件: ```html <template> <view> <view id="map"></view> </view> </template> <script> export default { mounted() { this.initMap() }, methods: { initMap() { // 初始化地图 const map = new BMap.Map('map') // 设置地图中心点 const point = new BMap.Point(116.404, 39.915) map.centerAndZoom(point, 15) } } } </script> ``` 3. 保存文件。 步骤三:在页面中使用百度地图组件 1. 打开需要使用百度地图的页面组件文件。 2. 在需要显示地图的位置插入组件标签: ```html <template> <view> <map></map> </view> </template> ``` 3. 保存文件。 通过以上步骤,就可以在uni-app中成功引入百度地图了。在浏览器中打开该页面,即可看到引入的百度地图组件,并根据代码中设置的经纬度显示地图中心点。如果需要进一步使用百度地图的功能,可以参考百度地图开发文档进行相关操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Microanswer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值