2016-07-01 8 views
0

私は複数の画像アドレスを持っています。アドレスはhttps://tmp.ocpu.io/x05fcaa7ec4/graphics/last/png?width=800&height=600のように見えます。複数のファイルをzipファイルに入れて、javascriptを使用してダウンロードします。

上記の住所は24時間後に失効することがあります。だから次の2つのアドレスを使用してください。 http://r.ddmcdn.com/s_f/o_1/cx_633/cy_0/cw_1725/ch_1725/w_720/APL/uploads/2014/11/too-cute-doggone-it-video-playlist.jpgおよびhttps://static.pexels.com/photos/7720/night-animal-dog-pet.jpg

私はこれらの2つのイメージ(アドレス)をzipファイルに置き、ユーザーがzipファイルをダウンロードできるWebサイトを構築したいと考えています。これが可能かどうかわかりませんが、私の次のコードは部分的に動作し、zipファイルをダウンロードできますが、イメージビューアソフトウェアで開くことはできません。助けてください、ありがとう!

HTML

<!doctype html> 
<html> 

    <head> 
    <title>Zipper</title> 
    <script src="jszip.min.js"></script> 
    <script src="stat_FileSaver.min.js"></script> 
    <script src="script.js"></script> 
    </head> 

    <body> 

    </body> 

</html> 

JavaScriptの(script.js)

var urls = [ 
    'http://r.ddmcdn.com/s_f/o_1/cx_633/cy_0/cw_1725/ch_1725/w_720/APL/uploads/2014/11/too-cute-doggone-it-video-playlist.jpg', 
    'https://static.pexels.com/photos/7720/night-animal-dog-pet.jpg' 
]; 
var images = []; 
var counter = 0; 

// From http://stackoverflow.com/questions/6150289/how-to-convert-image-into-base64-string-using-javascript 
function convertImgToBase64URL(url, callback){ 
    var img = new Image(); 
    img.crossOrigin = 'Anonymous'; 
    img.onload = function(){ 
     var canvas = document.createElement('CANVAS'), 
     ctx = canvas.getContext('2d'), dataURL; 
     canvas.height = this.height; 
     canvas.width = this.width; 
     ctx.drawImage(this, 0, 0); 
     dataURL = canvas.toDataURL(); 

     callback(dataURL, url); 
     canvas = null; 
    }; 
    img.src = url; 
} 

function createArchive(images){ 
    // Use jszip 
    var zip = new JSZip(); 
    var img = zip.folder("images"); 

    for (var i=0; i<images.length; i++) { 
    img.file(i+".jpg", images[i].data, {base64: true}); 
    } 
     zip.generateAsync({type:"blob"}).then(function(file){ 
     saveAs(file, "images.zip"); 

     }) 

} 

for (var i = 0; i<urls.length; i++) { 
    convertImgToBase64URL(urls[i], function (base64Img, url) { 
    images.push({ 
     url: url, 
     data: base64Img 
    }); 
    counter++; 

    if (counter == urls.length) { 
     createArchive(images); 
    } 
    }); 
} 

答えて

1

images[i].dataは(data:image/png;base64,iVBOR...のような)データのURLが含まれている、あなたが取得するdata:image/png;base64,一部を削除する必要がありますベース64の内容:

var commaIdx = images[i].data.indexOf(","); 
img.file(i+".jpg", images[i].data.slice(commaIdx + 1), {base64: true}); 

画像が異なるサーバーにある場合は、CORSというエラーが表示されます。これで問題が発生しないことを確認することができます。

関連する問題