文件下载 针对安卓系统

复制代码
<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:// 开头),不要使用相对路径。

相关推荐
汉堡大王95273 小时前
GPT-6 上线 48 小时,我扒开了 Intelligent UI 的运行机制:DIL、沙箱 Worker 和一个 React 式协调器
前端·javascript·后端
hai_android3 小时前
Chat 聊天模块功能总结
前端·javascript·vue.js
子非鱼a3 小时前
【WEB】EasySSTI
java·开发语言·前端
小羊没烦恼!3 小时前
jQuery1.5的改进细节
java·服务器·开发语言·前端·c#
独孤九剑打醒他3 小时前
【原创开源·修订版】源-栅-漏-栅-源横向双栅MOS:从“被误解的短路”到“电流路径多值逻辑与顶层供电架构”
前端·嵌入式硬件·架构·开源·硬件工程
创世虚拟世界3 小时前
我做了一个 3D 虚拟世界基底,基于这个再做 3D 虚拟世界或者元宇宙,会事半功倍
javascript·人工智能·3d·gitee·虚拟现实
阿狗童鞋3 小时前
React实战指南
前端·react.js·前端框架
v:ychya20184 小时前
独立站外贸建站公司怎么选?建站就要建营销型网站
前端·php
春涧草茶4 小时前
慢就是快12-12手动抛出异常
java·linux·前端
三小河4 小时前
从 Markdown 到 Generative UI:AI 如何从“生成答案”进化到“生成界面”?
前端·人工智能·后端