2017-02-15 14 views
1

私は、電話の録音をブラウズしてダウンロードするためのアプリケーションを作成しています。Angular 2でファイルをダウンロードするにはどうすればよいですか?

このアプリケーションの一部には、記録と関連情報を表示する* ngForが設定されたテーブルがあります。テーブルの各行には、ダウンロード用の記録にマークするためのチェックボックスもあります。私は、私が使用しているテストmp3sへのリンクをconsole.logにすることができるようになりましたが、実際に上記mp3のダウンロードをどのようにトリガーするのか分かりません。

これは、Typescriptを使用してjQueryを使用せずに行うことができます。

<table> 
     <thead> 
      <tr> 
       <th> 
        <input type="checkbox" [checked]="isAllChecked()" (change)="checkAll($event)"> </th> 
       <th>Date</th> 
       <th>Time</th> 
       <th>Duration</th> 
       <th>Calling Number</th> 
       <th>Called Number</th> 
       <th> </th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr *ngFor="let entry of recordingsList"> 
       <td> 
        <input type="checkbox" [(ngModel)]="entry.isSelected"> </td> 
       <td>{{entry.date}}</td> 
       <td>{{entry.time}}</td> 
       <td>{{entry.duration}}</td> 
       <td>{{entry.callingNumber}}</td> 
       <td>{{entry.calledNumber}}</td> 
       <td> 
        <button (click)="openPlayer(entry)" class="play-button"><i class="material-icons">play_arrow</i></button> 
       </td> 
      </tr> 
     </tbody> 
    </table> 

-

// Download selected recordings 

    downloadSelected() { 
     let isSelected = this.recordingsList.filter(x => x.isSelected); 
     isSelected.forEach(x => console.log(x.audio)); 
    } 

-

どのような援助が大幅に高く評価されています。

+0

[アンカー要素](https: //developer.mozilla.org/en/docs/Web/HTML/Element/a)には 'download'属性があります。 –

答えて

1

直接質問に答える、あなたはすべてのリンクのための新しいタブを開くことができます。

downloadSelected() { 
     let isSelected = this.recordingsList.filter(x => x.isSelected); 
     isSelected.forEach(x => window.open(x.audio, '_blank')); 
    } 

はしかし、これは複数のタブが乱暴に開けると用語のユーザーエクスペリエンスで優雅ではありません。そこで、選択したファイルを含むzipフォルダを作成してダウンロードさせる特別なURL(ex:example.com/bulk-download?ids=1,34,56)を作成することをお勧めします。

+0

ありがとうございました!しかし、これが私の必要性を完全に果たすのを妨げる2つの問題があります。選択したmp3が新しいウィンドウで開きますが、ユーザーがダウンロードボタンをクリックしたときにファイルをダウンロードする必要があります。また、選択したすべての録画が開かれることはありません。それは最初のものだけを開いているようです。 –

+0

技術的には、飛行中に複数のアンカー要素を作成してクリックイベントを発生させることができます。しかし、これはブラウザの制約のために信頼できず、角度のない方法です。だから、正しい解決策は、バックエンドに圧縮ファイルを作成することです。 –

+0

ええ、それは非常にきれいな解決策のようには見えません。私はAngularでこれを行うことができると期待していましたが、それは単純に不可能であり、私はバックエンドの開発者が選択したファイルのzipを作成し、それにリンクできるようになりますhref to。 :( –

関連する問題