1.jq批量下載
function BatchDown(){ var mp3arr = ["http://localhost:48948/uploadfiles/0008/289a5a5d-c142-417d-9b40-0a7c8f707da2/attachmentEB519DA4D7A4C3DE556B4A01DA1008F70008.csv", "http://localhost:48948/uploadfiles/0008/289a5a5d-c142-417d-9b40-0a7c8f707da2/attachmentBCA72C7C7F10FF78AA0D9D6FEFC5A4D50008.xls", "http://localhost:48948/uploadfiles/0008/289a5a5d-c142-417d-9b40-0a7c8f707da2/attachment1893AE4D837B568079935B052BDE01DDC0008.xls"]; for (var index = 0; index < mp3arr.length; index++) { download('第' + index + '個文件', mp3arr[index]); } } function download(name, href) { var a = document.createElement("a"), //創建a標簽 e = document.createEvent("MouseEvents"); //創建鼠標事件對象 e.initEvent("click", false, false); //初始化事件對象 a.href = href; //設置下載地址 alert(href); a.download = name; //設置下載文件名 a.dispatchEvent(e); //給指定的元素,執行事件click事件 }
但批量下載方式有時候會不好使,比如說在IE8瀏覽器上,IE8只支持同時下載一個附件,這時候就需要下面的方法,打包下載
2.打包下載
我用的開發語言的.net,用的打包插件是ICSharpCode
具體方法就不說了,以下代碼主要是注意點的地方
FileStream fs = System.IO.File.OpenRead(item.Key.ToString()); long dataLengthToRead = fs.Length;//獲取下載的文件總大小 const long ChunkSize = 102400;//100K 每次讀取文件,只讀取100K,這樣可以緩解服務器的壓力 byte[] buffer = new byte[ChunkSize]; ZipEntry entry = new ZipEntry(yJK.FileOriginalName); entry.DateTime = (DateTime)item.Value; entry.Size = fs.Length; zipoutputstream.PutNextEntry(entry); while (dataLengthToRead > 0) { int lengthRead = fs.Read(buffer, 0, Convert.ToInt32(ChunkSize));//讀取的大小 crc.Update(buffer, 0, lengthRead); zipoutputstream.Write(buffer, 0, lengthRead); dataLengthToRead = dataLengthToRead - lengthRead; } entry.Crc = crc.Value; crc.Reset(); fs.Close();