你好!
我有一个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文件时,我得到了文件,但我只有空页......
谢谢!