文件下载 针对安卓系统

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

相关推荐
qq_120840937127 分钟前
Three.js 骨骼动画工程实战:AnimationMixer、剪辑与混合权重调参
开发语言·javascript·ecmascript
XGeFei29 分钟前
【表单处理】——如何防止CSRF(跨站请求伪造)攻击的?
前端·网络·csrf
还不秃顶的计科生32 分钟前
多模态模型下载
java·linux·前端
GISer_Jing1 小时前
笑不活了!蒸馏Skill竟能复刻前任、挽留同事?三大热门项目+完整地址汇总
前端·人工智能
Bigger2 小时前
🚀 mini-cc:打造你的专属轻量级 AI 编程智能体
前端·node.js·claude
小江的记录本2 小时前
【网络安全】《网络安全三大加密算法结构化知识体系》
java·前端·后端·python·安全·spring·web安全
早起傻一天~G2 小时前
vue2+element-UI上传图片封装
开发语言·javascript·ui
广师大-Wzx2 小时前
JavaWeb:前端部分
java·前端·javascript·css·vue.js·前端框架·html
M ? A2 小时前
你的 Vue v-memo 与 v-once,VuReact 会编译成什么样的 React 代码?
前端·javascript·vue.js·经验分享·react.js·面试·vureact
是上好佳佳佳呀2 小时前
【前端(七)】CSS3 核心属性笔记:单位、背景、盒子模型与文本换行
前端·笔记·css3