【问题标题】:How to download a locally stored file in VueJS如何在 VueJS 中下载本地存储的文件
【发布时间】:2018-06-09 12:02:53
【问题描述】:

我有一个上传系统,我正在尝试为用户提供一个示例模板。我有一个本地存储在资产子文件夹中的模板,我想在我的 VueJS 组件中访问它并在页面上显示指向它的链接。这些是文件结构的应用部分:

├──app
│  └──Components
│     └──Uploader.vue
└──assets
   └──files
      └──Template_Upload.csv

在 Uploader.vue 我有这一行:

<a v-bind:href="item.loc" download>{{item.title}}</a>

在导出中我有这一行

data() {
  return {
    item: {title: 'Upload Template', loc: require('../../assets/files/Template_Upload.csv')}
}

如果我有图像,此方法有效。单击链接后,它会下载图像。但是,如果我使用 .csv 或 .xlsx 文件,打开页面时会引发错误。我试过使用

import fileTemplate from "../../assets/files/FileTemplate.csv";

同样,使用 fileTemplate 作为 loc 属性。如果我使用图片,这也有效。但我无法带入文件。这是我无法克服的限制,还是我可以尝试其他方法?

我还进入了 Visual Studio(换句话说,.csproj 文件),并将 Template_Upload.csv Build Action 设置设置为“Content”,Copy到输出目录设置设置为“始终复制”。

这些是我目前主要使用的资源:

How to import and use image in a Vue single file component?

What are the various "Build action" settings in Visual Studio project properties and what do they do?

【问题讨论】:

  • 您需要一个 CSV 加载程序。其他选项包括让您的 Web 服务器为该目录提供服务,然后 loc 将只是一个典型的链接

标签: html csv download vue.js


【解决方案1】:

对于不想使用 webpack 的人,我解决了这个问题:

  • public 中创建一个名为files 的文件夹
  • 我将要下载的文件移到了那里 瞧,工作了。

&lt;a href="/files/book.pdf" download&gt;DOWNLOAD&lt;/a&gt;

【讨论】:

  • 完美运行
【解决方案2】:

感谢 OverCoder,解决方案确实是添加一个 CSV 加载器,以便将本地存储的文件添加到 webpack 服务器。对于其他使用 webpack 的人,我将此模块添加到我的 webpack.config.js 文件中:

{
    test: /\.(csv|xlsx|xls)$/,
    loader: 'file-loader',
    options: {
        name: `files/[name].[ext]`
    }
}

然后我可以像这样在我的模板中轻松引用该文件,

<a href="/files/Template_Upload.csv" download>File Template</a>

或者这个

<a :href="item.loc" download>File Template</a>

使用与我所说的相同的数据返回。在项目构建时,将 require 语句与加载器一起使用会将“必需”文件放入 wwwroot/files 文件夹中。再次感谢 OverCoder,这为我节省了很多时间。

【讨论】:

  • 这有点晦涩难懂。什么要求声明?它可以看到的确切文件夹结构是什么?我正在进行的项目已经相当大了,我不确定我是否可以在任何我想要的地方添加任何assets 文件夹。
【解决方案3】:

这对我有用;

<a href="../../assets/files/FileTemplate.csv" download>Download</a>

即使在对话框中也表现得很好。

【讨论】:

    【解决方案4】:

    试试这个:

    <a href="../../assets/files/FileTemplate.csv">Download</a>
    

    【讨论】:

      【解决方案5】:

      我在 Laravel 上,我关注 this tuto 让我的工作:

      1. 创建一个FileController,添加一个下载方法
      public function downloadFile($file){
         $path = public_path().'/app/upload-folder/'.$file; // or storage_path() if needed
         $header = [
             'Content-Type' => 'application/*',
         ];
         return response()->download($path, $file, $header);
      }
      
      
      1. api.php中创建一个api入口点
      Route::get('download/upload-folder/{file}', 'FileController@downloadFile');
      
      1. 创建一个使用 axios 的方法
      async downloadTemplateFile(file){
          axios.get('/download/template/file/'+file, {responseType: 'arraybuffer'}).then(res=>{
            let blob = new Blob([res.data], {type:'application/*'})
            let link = document.createElement('a')
            link.href = window.URL.createObjectURL(blob)
            link.download = file
            link._target = 'blank'
            link.click();
          })
        }
      
      1. 从 vue 模板调用
      <li>Download the CSV template <a href="#" @click="downloadTemplateFile('FileTemplate.csv')">here</a></li>
      

      希望这对其他人有帮助;)

      【讨论】:

      • 不,它没有逐字逐句地尝试这样做
      【解决方案6】:

      将您要下载的文件放在公共文件夹中,因为它是您应用程序的根文件夹。 文件结构图像-> Image Link

      给出如下链接:

      <a :href="'/files/SampleFile.xlsx'" class="btn btn-primary" download>Sample File</a>
      

      您可以提供文件夹结构中的任何文件。例如:.pdf、.xlsx、.png 等

      请注意,href 为 :href,文件路径为 " '您的文件路径' "

      在 Vue3 上测试和工作

      【讨论】:

        【解决方案7】:

        只是@Judd's answer 的扩展。如果您没有webpack.config.js,可以使用vue.config.js 文件。 (如果不存在就在根目录下创建)

        vue.config.js

        module.exports = {
          configureWebpack: {
            module: {
              rules: [
                {
                  test: /\.(csv|xlsx|xls)$/,
                  loader: 'file-loader',
                  options: {
                    name: `files/[name].[ext]`
                  }
                }
              ],
             },
          },
        };
        
        

        【讨论】:

          【解决方案8】:

          试试这个方法,它有一个按钮:

          <a href="/files/Template_Upload.csv" download>
              <button class="btn btn-primary">Download</button>
          </a>
          

          【讨论】:

            猜你喜欢
            • 2021-06-10
            • 2022-01-13
            • 1970-01-01
            • 1970-01-01
            • 2017-02-18
            • 1970-01-01
            • 2017-12-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多