最近创建的文件无法下载

时间:2012-09-14 12:11:51

标签: jquery file tomcat download struts

我有以下情况: 我必须动态创建文件,用户代理以这种方式通过ajax将数据发送到服务器:

$("#generateButton").live("click",function(){
dateLimite = $("#dateLimite").val();
 $.ajax({
   type    : "POST",
   url     : "../generateFile.do",
   data    : { fileName: "demandeExplication",
   nbrParam: "3",
   param1:"<%=agent.getPrenomAgentArabe()+" "+agent.getNomAgentArabe()%>",
   param2:"<%=descriptionActe%>",
   param3:dateLimite,
   },
   dataType: "html",

}).done(function(data) {
$("#test").empty().append(data);
  fileName = $("#test").find("input").val();
$.fileDownload('http://localhost:8080/gestionRH/fiches/temp/'+fileName);

});
});

服务器使用动态创建文件的操作处理此数据:

public class GenerateFile extends Action
{ 



public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) throws IOException {
    String fileName = request.getParameter("fileName");
    Integer nbrParam = Integer.parseInt(request.getParameter("nbrParam"));
    String[] valueParam = new String[nbrParam+1];
    for(int i =1;i<=nbrParam;i++)
    {  System.out.println(request.getParameter("param"+i));
        valueParam[i]=request.getParameter("param"+i);
    }
    FileInputStream in = new FileInputStream("C:\\Users\\free\\Desktop\\myworkspace\\gestionRH\\WebRoot\\fiches\\"+fileName+".doc");
    POIFSFileSystem fs = new POIFSFileSystem(in);
    HWPFDocument doc = new HWPFDocument(fs);
    Range r = doc.getRange();
    for(int i=1;i<=nbrParam;i++)
    {   System.out.println("<param"+i+">");
        System.out.println(valueParam[i]);
        r.replaceText("<param"+i+">", valueParam[i]);
    }


    File frr = new File("C:\\Users\\free\\Desktop\\myworkspace\\gestionRH\\WebRoot\\fiches\\temp");
    File temp = File.createTempFile("monfile",".doc",frr);
    FileOutputStream out = new FileOutputStream(temp);
    doc.write(out);
    out.close();
    in.close();
    request.setAttribute("fileName", temp.getName());
    return mapping.findForward("fileName");
}
}

我使用此插件进行下载:http://johnculviner.com/category/jQuery-File-Download.aspx

我收到错误下载! 我没有使用现有文件,或者在使用此代码一段时间后触发下载时

function timeout_trigger() {    

fileName = $(“#test”)。find(“input”)。val();     }

我用这种方式使用它:

......}).done(function(data) {
setTimeout("timeout_trigger()",7000);
});

并且第二种解决方案并不总是有效,所以我必须解决这个问题。 为什么现有文件下载没有问题,最近在下载时创建了显示错误?

1 个答案:

答案 0 :(得分:2)

这可能是因为文件还没有上传。使用AJAX,文件将在后台上传。这需要时间。只有在整个文件上传后才会触发服务器代码(它不想对部分文件进行操作)。

所以你需要的是一种方式来询问&#34;是否有正在上传的内容?&#34;。当我遇到同样的问题时,我发送了几个AJAX请求。第一个会在会话中创建一个状态对象,我将记录文件名。

查询文件时,我会查看该状态对象,看看上传是否完整并返回状态。

还有一些方法可以挂钩上传过程;当你这样做时,你甚至可以添加一个&#34;上传的百分比&#34;到状态对象。