我有一个为xml文件生成数字签名的java函数。这是一段给我带来麻烦的摘录:
String boundary = MultiPartFormOutputStream.createBoundary();
HttpURLConnection urlConn = (HttpURLConnection)MultiPartFormOutputStream.createConnection(new URL(url + "/sign"));
urlConn.setRequestProperty("Accept", "*/*");
urlConn.setRequestProperty("Content-Type", MultiPartFormOutputStream.getContentType(boundary));
urlConn.setRequestProperty("Cache-Control", "no-cache");
urlConn.setDOInput(true);
urlConn.setDoOutput(true);
MultiPartFOrmOutputStream up = new MultiPartFormOutputStream(urlCOnn.getOutputStream(), boundary);
up.writeField(SignServletParams.detachedParam, "1");
up.writeFile(SignServletParams.xmlParam, "text/xml", "xml_file.xml", XMLUtil.toEncodedStream(doc);
up.close();
Document ret = null;
String connRead = "";
BufferedReader down = new BufferedReader(new InputStreamReader(urlCOnn.getINputStream()));
如果我尝试上传小的xml文件,它可以正常工作,但是,如果xml文件较大(有几千个节点),我会得到一个IOException,其中正在创建BufferedReader。异常消息仅表明服务器返回500状态。我查看了Apache服务器日志,并报告了以下内容:
输入过滤器:无法创建临时文件:“文件名”
我从写过它的其他人那里继承了这段代码,所以我仍然试图将所有内容拼凑在一起,但是对于为什么该函数适用于小文件而对大文件失败的任何见解都将不胜感激。
答案 0 :(得分:0)
我是一个菜鸟很抱歉,如果这是一个愚蠢的答案,但你是否可以在“上传者”将文件拆分成必要的部分,并在“服务器端”再次合并它们?
答案 1 :(得分:0)
感谢约翰内斯的建议,但我弄清楚问题是什么,我很傻。事实证明,mod_security配置文件指定的临时文件创建目录不存在。将其更改为真实的目录路径可以修复所有内容。