Javascript 如何使用表单提交下载zip文件并获得回调? //步骤1 函数doSubmit(数据1、数据2){ $(“#数据格式”).remove(); var形式=“”; 形式+=''; 形式+=''; 形式+=''; 形式+=''; 形式+=''; 形式+=''; $('body')。追加(表格); $(#dataForm data1”).val(data1); $(“#数据形式数据2”).val(数据2); $(“#dataForm”).attr(“action”,“/download/fileDownload.do”); $(“#数据格式”).submit(函数(事件){ event.preventDefault(); $.ajax({ url:“/download/fileDownload.do”, async:true, 类型:“POST”, 数据:{ “数据1”:数据1, “数据2”:数据2 }, contentType:“application/x-www-form-urlencoded;charset=UTF-8”, processData:对, 成功:功能(数据){ var blob=新blob([数据]); var link=document.createElement('a'); link.href=window.URL.createObjectURL(blob); link.download=“testFile.zip”; link.click(); } }); }); $(“#数据格式”).submit(); } //步骤2 @RequestMapping(value=“/download/fileDownload.do”) 公共ModelAndView文件下载(HttpServletRequest请求、HttpServletResponse响应、ModelAndView mav)引发异常{ setCharacterEncoding(“utf-8”); 响应。setCharacterEncoding(“utf-8”); 参数inMap=rDictionary(请求、响应); 参数outMap=新参数(); 参数errorMap=新参数(); File=null; 试一试{ file=新文件(inMap.get(“data1”); errorMap=Util.putErrorMap(ErrConst.ERROR\u SUCCESS\u代码,null,inMap); }捕获(例外e){ e、 printStackTrace(); } mav.addObject(“outMap”,outMap); mav=新模型和视图(“下载视图”,“下载文件”,文件); 返回mav; } //步骤3 公共类DownloadView扩展了AbstractView{ 私有静态最终记录器Logger=LogManager.getLogger(DownloadView.class); 公共下载视图(){ setContentType(“应用程序/下载;字符集=utf-8”); } @凌驾 受保护的void renderMergedOutputModel(地图模型, HttpServletRequest请求,HttpServletResponse响应) 抛出异常{ File=null; 试一试{ file=(file)model.get(“downloadFile”); setContentType(getContentType()); response.setContentLength((int)file.length()); 字符串文件名=URLEncoder.encode(file.getName(),“UTF-8”); response.setHeader(“内容处置”、“附件;文件名=\”) +文件名+“\”;”; setHeader(“内容传输编码”、“二进制”); OutputStream out=response.getOutputStream(); FileInputStream fis=null; 试一试{ fis=新文件输入流(文件); 复制(fis,out); }最后{ 如果(fis!=null){ 试一试{ fis.close(); }捕获(ioe异常ioe){ } } } out.flush(); }捕获(例外e){ logger.error(“找不到文件!!![”+file.getPath()+“]”; } } }

Javascript 如何使用表单提交下载zip文件并获得回调? //步骤1 函数doSubmit(数据1、数据2){ $(“#数据格式”).remove(); var形式=“”; 形式+=''; 形式+=''; 形式+=''; 形式+=''; 形式+=''; 形式+=''; $('body')。追加(表格); $(#dataForm data1”).val(data1); $(“#数据形式数据2”).val(数据2); $(“#dataForm”).attr(“action”,“/download/fileDownload.do”); $(“#数据格式”).submit(函数(事件){ event.preventDefault(); $.ajax({ url:“/download/fileDownload.do”, async:true, 类型:“POST”, 数据:{ “数据1”:数据1, “数据2”:数据2 }, contentType:“application/x-www-form-urlencoded;charset=UTF-8”, processData:对, 成功:功能(数据){ var blob=新blob([数据]); var link=document.createElement('a'); link.href=window.URL.createObjectURL(blob); link.download=“testFile.zip”; link.click(); } }); }); $(“#数据格式”).submit(); } //步骤2 @RequestMapping(value=“/download/fileDownload.do”) 公共ModelAndView文件下载(HttpServletRequest请求、HttpServletResponse响应、ModelAndView mav)引发异常{ setCharacterEncoding(“utf-8”); 响应。setCharacterEncoding(“utf-8”); 参数inMap=rDictionary(请求、响应); 参数outMap=新参数(); 参数errorMap=新参数(); File=null; 试一试{ file=新文件(inMap.get(“data1”); errorMap=Util.putErrorMap(ErrConst.ERROR\u SUCCESS\u代码,null,inMap); }捕获(例外e){ e、 printStackTrace(); } mav.addObject(“outMap”,outMap); mav=新模型和视图(“下载视图”,“下载文件”,文件); 返回mav; } //步骤3 公共类DownloadView扩展了AbstractView{ 私有静态最终记录器Logger=LogManager.getLogger(DownloadView.class); 公共下载视图(){ setContentType(“应用程序/下载;字符集=utf-8”); } @凌驾 受保护的void renderMergedOutputModel(地图模型, HttpServletRequest请求,HttpServletResponse响应) 抛出异常{ File=null; 试一试{ file=(file)model.get(“downloadFile”); setContentType(getContentType()); response.setContentLength((int)file.length()); 字符串文件名=URLEncoder.encode(file.getName(),“UTF-8”); response.setHeader(“内容处置”、“附件;文件名=\”) +文件名+“\”;”; setHeader(“内容传输编码”、“二进制”); OutputStream out=response.getOutputStream(); FileInputStream fis=null; 试一试{ fis=新文件输入流(文件); 复制(fis,out); }最后{ 如果(fis!=null){ 试一试{ fis.close(); }捕获(ioe异常ioe){ } } } out.flush(); }捕获(例外e){ logger.error(“找不到文件!!![”+file.getPath()+“]”; } } },javascript,Javascript,嗨。 我正试图用上面的代码下载zip文件。 下载完成后,我必须为下一次下载需要回调函数 运行此代码时,发生下载。 但是下载的zip文件崩溃了 我不知道怎么了 请给我一个解决方案。 谢谢 (抱歉,简写为英语。)请解释“下载的zip崩溃”是什么意思。档案里到底有什么?你确定你有什么内容吗?它类似于zip文件还是其他文件?下载的zip文件的大小大于原始zip文件(并且无法打开文件)。请尝试在文本编辑器或zip程序以外的其他程序中打开zip文件,以便您可以实际检查其内容。请解释“下载的zip崩溃”的含义

嗨。 我正试图用上面的代码下载zip文件。 下载完成后,我必须为下一次下载需要回调函数

运行此代码时,发生下载。 但是下载的zip文件崩溃了

我不知道怎么了

请给我一个解决方案。 谢谢


(抱歉,简写为英语。)

请解释“下载的zip崩溃”是什么意思。档案里到底有什么?你确定你有什么内容吗?它类似于zip文件还是其他文件?下载的zip文件的大小大于原始zip文件(并且无法打开文件)。请尝试在文本编辑器或zip程序以外的其他程序中打开zip文件,以便您可以实际检查其内容。请解释“下载的zip崩溃”的含义。档案里到底有什么?你确定你有什么内容吗?它类似于zip文件还是其他文件?下载的zip文件的大小大于原始zip文件(并且无法打开文件)。请尝试在文本编辑器或zip程序以外的其他程序中打开zip文件,以便您可以实际检查其内容。
// Step 1
function doSubmit(data1, data2){
    $("#dataForm").remove();

    var form = '';

    form += '<form name="dataForm" id="dataForm" action="" target="hiddenIframe" method="post" enctype="multipart/form-data" accept-charset="UTF-8">';
    form += '<input type="text" name="data1" id="data1"/>';
    form += '<input type="text" name="data2" id="data2"/>';
    form += '<div name="dataFormTarget" id="dataFormTarget" style="display:none">';
    form += '</div>';
    form += '</form>';

    $('body').append(form);

    $("#dataForm data1").val(data1);
    $("#dataForm data2").val(data2);

    $("#dataForm").attr("action", "/download/fileDownload.do");
    $("#dataForm").submit(function(event){
        event.preventDefault();
        $.ajax({
            url : "/download/fileDownload.do",
            async : true,
            type : "POST",
            data : {
                "data1" : data1,
                "data2" : data2
            },
            contentType : "application/x-www-form-urlencoded; charset=UTF-8",
            processData : true,
            success : function(data){
                var blob=new Blob([data]);
                var link=document.createElement('a');
                link.href=window.URL.createObjectURL(blob);
                link.download="testFile.zip";
                link.click();
            }

        });
    });
    $("#dataForm").submit();
}




// Step 2
@RequestMapping(value = "/download/fileDownload.do")
public ModelAndView fileDownload(HttpServletRequest request, HttpServletResponse response, ModelAndView mav) throws Exception {

    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");

    Parameter inMap = rDictionary(request, response);

    Parameter outMap = new Parameter();
    Parameter errorMap = new Parameter();

    File file = null;

    try {
        file = new File(inMap.get("data1"));
        errorMap = Util.putErrorMap(ErrConst.ERROR_SUCCESS_CODE, null, inMap);

    } catch (Exception e) {
        e.printStackTrace();
    }

    mav.addObject("outMap", outMap);
    mav = new ModelAndView("downloadView", "downloadFile", file);
    return mav;
}










// Step 3
public class DownloadView extends AbstractView {
    private static final Logger logger = LogManager.getLogger(DownloadView.class);

    public DownloadView() {
        setContentType("application/download; charset=utf-8");
    }


    @Override
    protected void renderMergedOutputModel(Map<String, Object> model,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        File file = null;

        try{
            file = (File) model.get("downloadFile");

            response.setContentType(getContentType());

            response.setContentLength((int) file.length());

            String fileName = URLEncoder.encode(file.getName(), "UTF-8");

            response.setHeader("Content-Disposition", "attachment; filename=\""
                    + fileName + "\";");

            response.setHeader("Content-Transfer-Encoding", "binary");

            OutputStream out = response.getOutputStream();

            FileInputStream fis = null;

            try {

                fis = new FileInputStream(file);

                FileCopyUtils.copy(fis, out);

            } finally {

                if (fis != null) {

                    try {

                        fis.close();

                    } catch (IOException ioe) {
                    }

                }

            }

            out.flush();
        }catch(Exception e){
            logger.error("file not found Excpetion !!!["+ file.getPath() +"]");
        }

    }
}