微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 HttpClient 和 file-saver.js 下载文件会获取 JHipster 应用程序加载页面以及请求的下载文件

如何解决使用 HttpClient 和 file-saver.js 下载文件会获取 JHipster 应用程序加载页面以及请求的下载文件

问题总结:

我正在使用 HttpClient 和 file-saver.js 成功下载从 Spring rest 端点提供的请求文件。但是,具有请求的文件名的两个文件(应该只有 1 个)会被保存。第一个文件在请求到达 Spring Rest 端点之前就被保存了。这是一个 5K 文件,在检查时包含 jhipster 应用程序加载 html 页面。请求从服务器返回后,将保存另一个同名文件,即请求的实际下载文件

为什么会发生这种情况?请参阅下面的库版本和代码示例:

软件版本:

"@angular/common": "8.2.0",

"@angular/core": "8.2.0",

"文件保护程序": "^2.0.2",

"rxjs": "6.4.0",

下载服务

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
    providedIn: 'root'
})
export class DownloadsService {
    public resourceUrl = 'api/downloads/';
    constructor(private http: HttpClient) {}

    download(fileId: string): Observable<Blob> {
        const url = this.resourceUrl + fileId;
        return this.http.get(url,{reportProgress: true,responseType: 'blob'});
    }
}

下载组件

import {Component,OnInit} from '@angular/core';
import {faApple,faLinux,faWindows} from '@fortawesome/free-brands-svg-icons';
import {DownloadsService} from './downloads.service';
import * as fileSaver from 'file-saver';

@Component({
    selector: 'jhi-downloads',templateUrl: './downloads.component.html',styleUrls: ['./downloads.component.css']
})
export class DownloadsComponent implements OnInit {
    
    ... download object defined here with file name and fileid

    termsAccepted = false;

    constructor(private downloads: DownloadsService) {
    }

    ngOnInit() {
    }

    onClick(download) {
        const filename = download.filename;
        const fileId = download.fileId;
        this.downloads.download(fileId)
            .subscribe(blob => {
                fileSaver.saveAs(blob,filename);
            });
    }
}

结果是2个文件

filename.ext - 这是 jhipster 应用加载 html 页面 (5k)

filename.ext(1) - 这是实际请求的文件 (70.5M)

额外说明:jhipster 应用以生产模式运行,部署在 Tomcat 应用服务器上。

解决方法

愚蠢的错误....下载按钮使用了 <a> 标签。更改为 <div> 并且一切正常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?