【问题标题】:Auto - Download encrypted file自动 - 下载加密文件
【发布时间】:2017-03-21 13:49:52
【问题描述】:

我正在尝试加密,然后从客户端的文件夹中下载文件。我有下面的代码,但没有下载实际的加密文件。构建下载 URL 是我遇到问题的地方。

<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Get Directory</title>
<!-- Update your jQuery version??? -->
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="assets/js/aes.js"></script>
<script> // type="text/javascript" is unnecessary in html5

// Short version of doing `$(document).ready(function(){`
// and safer naming conflicts with $
jQuery(function($) { 

    $('#file-input').on('change', function() {

        // You can't use the same reader for all the files
         var array1 = new Array

        $.each(this.files, function(i, file) {

            // Uses different reader for all files
            var reader = new FileReader
            var downloadUrl = ''
            reader.onload = function() {
                // reader.result refer to dataUrl
                // theFile is the blob... CryptoJS wants a string...
                var encrypted = CryptoJS.AES.encrypt(reader.result, '12334')
                downloadUrl = 'data:application/octet-stream,' + encrypted;
                array1.push(downloadUrl);
                setTimeout("window.location.assign('" + downloadUrl + file.name + '.encrypted'+ "');", 500)
            }

            reader.readAsDataURL(file)
            $('#thelist').append('FILES: ' + file.name + '<br>')

        })

    })
})
</script>
</head>
<body>
<input type="file" id="file-input" webkitdirectory="" directory="">
<div id="thelist"></div>
 </body>
</html>

【问题讨论】:

  • 我只想下载加密文件。我相信该文件在加密后存储在浏览器沙箱中。
  • 如果您看到代码,我没有看到任何服务器端代码。我没有将文件发送到任何服务器,将内容保存为 data uri 。我可以将其设置为按钮的属性并在 onClick 期间调用它,但我希望能够在没有按钮的情况下执行此操作。
  • 在客户端保存加密文件。

标签: javascript jquery encryption filereader cryptojs


【解决方案1】:

如果有人在寻找这个,我可以如下解决。

              var reader = new FileReader();
                reader.onload = function (e) {
                var encrypted = CryptoJS.AES.encrypt(reader.result, '12345');
                var dataUrl = 'data:data:application/octet-stream,' + encrypted;
                array1.push('href=data:data:application/octet-stream,' + encrypted);

                var link = document.createElement("a");
                link.download = file.name + '.encrypted';
                link.target = "_blank";

                // Construct the uri
                link.href = dataUrl;
                document.body.appendChild(link);
                link.click();

                // Cleanup the DOM
                document.body.removeChild(link);
                delete link;
                };
                $('#thelist').append('FILES: ' + file.name + '<br>')
                reader.readAsDataURL(file);
              })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2016-04-10
    相关资源
    最近更新 更多