文件下载 针对安卓系统

复制代码
<template>
  <div>
    <button @click="handleDownload">下载文件</button>

    <!-- 使用一个Dialog组件来提示用户 -->
    <el-dialog
      title="下载提示"
      :visible.sync="dialogVisible"
      width="80%"
      v-if="isMobile"
    >
      <p>检测到您在移动设备上,请选择下载方式:</p>
      <div style="display: flex; justify-content: space-around; margin-top: 20px;">
        <el-button type="primary" @click="openInBrowser">浏览器直接下载</el-button>
        <el-button type="success" @click="copyLink">复制下载链接</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
export default {
  data() {
    return {
      dialogVisible: false,
      fileUrl: 'https://your-domain.com/path/to/your/file.pdf',
      isMobile: false // 通过用户代理判断是否是移动设备
    };
  },
  mounted() {
    // 简单的移动设备检测
    this.isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
  },
  methods: {
    handleDownload() {
      // 如果是移动设备,显示提示对话框
      if (this.isMobile) {
        this.dialogVisible = true;
      } else {
        // 如果是PC,直接用方案二下载
        this.downloadFileDirectly();
      }
    },
    openInBrowser() {
      // 方案一:新窗口打开
      window.open(this.fileUrl, '_blank');
      this.dialogVisible = false;
    },
    copyLink() {
      // 使用现代浏览器 Clipboard API
      navigator.clipboard.writeText(this.fileUrl).then(() => {
        this.$message.success('下载链接已复制到剪贴板,请粘贴到浏览器地址栏中打开。');
      }).catch(err => {
        // 如果Clipboard API不支持,使用古老的document.execCommand方法
        const textArea = document.createElement('textarea');
        textArea.value = this.fileUrl;
        document.body.appendChild(textArea);
        textArea.select();
        document.execCommand('copy');
        document.body.removeChild(textArea);
        this.$message.success('下载链接已复制,请粘贴到浏览器中打开。');
      });
      this.dialogVisible = false;
    },
    downloadFileDirectly() {
      // 方案二的实现
      const link = document.createElement('a');
      link.href = this.fileUrl;
      link.download = '文件.pdf';
      link.style.display = 'none';
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
    }
  }
};
</script>
  1. 服务器配置 :确保你的服务器为文件设置了正确的 MIME 类型(如 .apk 对应 application/vnd.android.package-archive),否则浏览器可能无法正确识别。

  2. 文件路径 :务必使用完整的绝对URL (以 http://https:// 开头),不要使用相对路径。

相关推荐
kyriewen20 小时前
微软用Go重写TypeScript编译器,速度提升10倍,网友:这是“背叛”还是“救赎”?
前端·typescript·ecmascript 6
Ceelog20 小时前
久坐党自救指南:屏幕前 8 小时,身体到底在经历什么
前端·后端
西陵20 小时前
Agent 为什么会陷入 Doom Loop?OpenClaw 的破解之道
前端·人工智能·ai编程
Hyyy20 小时前
普通前端续命周报——第2周
前端
swipe21 小时前
DeepAgents 实战:用多 Agent 架构搭一个深度调研助手
javascript·面试·llm
wuxinyan12321 小时前
工业级大模型学习之路030:Streamlit 企业级智能体前端工作台
前端·学习·streamlit·智能体
修己xj21 小时前
告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
前端
anOnion1 天前
构建无障碍组件之Slider Pattern
前端·html·交互设计
云水一下1 天前
JavaScript 从零基础到精通系列:前世今生与编程启蒙
前端·javascript
月亮邮递员6161 天前
Markdown语法总结
开发语言·前端·javascript