如何使用window.location.href下载多个文件?

时间:2013-08-26 21:47:48

标签: javascript download

我有以下javascript:

function downloadFiles(){
  var files = [];
  files.push('mysite.com/file1.txt');
  files.push('mysite.com/file2.txt');
  files.push('mysite.com/file3.txt');

  for(var ii=0; ii<files.length; ii++){
    window.location.href = files[ii];
  }
}

问题是这只会下载列表中的最后一个文件,因为前两个文件会被最后一个文件覆盖。在进入下一个文件之前,如何等待用户对每个文件的输入?

3 个答案:

答案 0 :(得分:9)

我最终做了什么:

function downloadFiles(){
  var files = [];
  files.push('file1.txt');
  files.push('file2.txt');
  files.push('file3.txt');

  for(var ii=0; ii<files.length; ii++){
    downloadURL(files[ii]);
  }
}

var count=0;
var downloadURL = function downloadURL(url){
  var hiddenIFrameID = 'hiddenDownloader' + count++;
  var iframe = document.createElement('iframe');
  iframe.id = hiddenIFrameID;
  iframe.style.display = 'none';
  document.body.appendChild(iframe);
  iframe.src = url;
}

答案 1 :(得分:7)

如果您将代码更改为使用window.open()而不是window.location,则可以同时启动所有三个下载。

我知道这不满足在呈现每个下载之前等待用户输入的要求,但它确实构建了原始代码的精神。希望它会有所帮助。

function downloadFiles(){
  var files = [];
  files.push('file1.txt');
  files.push('file2.txt');
  files.push('file3.txt');

  for(var ii=0; ii<files.length; ii++){
    window.open(files[ii]);
  }
}

答案 2 :(得分:0)

一个旧的但我最终解决的方法是以下


package net.muddco.soundtest1;

import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import java.io.IOException;
import java.util.Random;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final String mFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" +
                CreateRandomAudioFileName(5) + "AudioRecording.3gp";

        Record r = new Record(mFileName);
        new Thread(r).start();

}

    public String CreateRandomAudioFileName(int string){
        String RandomAudioFileName = "ABCDEFGHIJKLMNOP";
        Random random = new Random();

        StringBuilder stringBuilder = new StringBuilder( string );
        int i = 0 ;
        while(i < string ) {
            stringBuilder.append(RandomAudioFileName.
                    charAt(random.nextInt(RandomAudioFileName.length())));

            i++ ;
        }
        return stringBuilder.toString();
    }
}