JavaScript:如何从文件的内容中恢复文件?

时间:2015-05-28 09:41:41

标签: java javascript html servlets download

你好!

我有一个Web应用程序,我必须从浏览器(客户端)向服务器发送一些加密文件,然后我必须下载(在另一个浏览器中),解密并保存这些文件。我使用HTML + JS(前端)和Java / Servlets / Tomcat(后端)。

我已经将它从JavaScript发送到我的servlet文件(通过FormData)并将该文件存储在磁盘上,但是我将该文件发送回浏览器时遇到了问题。

我无法通过链接直接从服务器下载文件,因为这些文件应该加密,因此,在将它们存储到本地磁盘之前,我必须解密它们。

我能够将文件的内容从servlet发送到浏览器,甚至还原.txt和.csv等文件,但我无法恢复图像(例如)。

来自servlet的代码

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("image/png");
        response.setHeader("Content-Disposition", "filename=\"licitatie_raluca.png\"");
        File srcFile = new File("../../Programe/eclipse/workspace/FileUploadingTest/WebContent/uplfiles/licitatie_raluca.png");
        FileUtils.copyFile(srcFile, response.getOutputStream());
    }

JavaScript代码

var content;
function download() {
                $.ajax({
                    url: "FileDownloader",
                    type: "POST",
                    async: false,
                    success : function(result) {
                        /* Create the link for downloading the file */
                        content = result;
                        getFile();
                    }
                });
            }

function getFile() {
    var download = function(content, fileName, mimeType) {
        alert(content);
        var a = document.createElement('a');
        mimeType = mimeType || 'application/octet-stream';

        if (navigator.msSaveBlob) { // IE10
            return navigator.msSaveBlob(new Blob([content], { type: mimeType }), fileName);
        } else if ('download' in a) { //html5 A[download]
            a.href = 'data:' + mimeType + ',' + encodeURIComponent(content);
            a.setAttribute('download', fileName);
            document.body.appendChild(a);
            setTimeout(function() {
                a.click();
                document.body.removeChild(a);
            }, 66);
            return true;
        } else { //do iframe dataURL download (old ch+FF):
            var f = document.createElement('iframe');
            document.body.appendChild(f);
            f.src = 'data:' + mimeType + ',' + encodeURIComponent(content);

            setTimeout(function() {
                document.body.removeChild(f);
            }, 333);
            return true;
        }
    }
    download(content, "imgage.png", "image/png");   
}

编辑没有。 1

目前我还没有实施加密/解密,因为我想首先在浏览器服务器和服务器浏览器之间进行文件传输。

当我尝试从servlet收到的内容创建.png文件时,我能够"创建"并保存它,但当我尝试打开它时,我收到一个错误:"读取PNG图像文件时出现致命错误:不是PNG文件"。

编辑没有。 2 我只能恢复包含明文的文件。我无法恢复.png,.pdf等文件。当我尝试恢复.pdf文件时,我得到了文件,但我只有空页......

谢谢!

0 个答案:

没有答案