Exception:文件导入的异常

负责排查一个导入功能的bug,debug找到的信息如下:

 

页面点击导入后,将上传的文件提到到一个controller

public ModelAndView importCSV( HttpServletRequest request, HttpServletResponse response ) throws Exception
	{
		s_logger.debug("importCSV: importing csv file ");
		long startTime = System.currentTimeMillis();
		String responseText = ImportContacts.getIFrameResponse(request);
		response.setContentType("text/html");
		response.setContentLength(responseText.length());
		response.getWriter().write(responseText);
		response.getWriter().flush();
		response.getWriter().close();
		long stopTime = System.currentTimeMillis();

		s_logger.stats((stopTime - startTime), Logger.OPERATION_CSV_IMPORT);

		return null;
	}

 

此处将文件中的内容解析为json格式,并放到一个html页面往回输出。responseText的内容为:

 

<html>
<head>
</head>
<body οnlοad="parent.Jebber.Upload.iFrameLoaded()">
 <div id='up_iframecontent'>
  [{"dt":{"0A-01-0-0":"Tang","08-01-0-0":"Eva"},"dg":5,"rt":33620224},
  {"dt":{"0e-04-0-0":"667193","0e-09-0-0":"861E+12","0A-01-0-0":"JIANG","08-01-0-0":"GARY"},"dg":4,"rt":33620224},
  {"dt":{"0A-01-0-0":"Guo","0e-02-0-0":"861E+12","08-01-0-0":"Hao"},"dg":6,"rt":33620224},
  {"dt":{"0e-04-0-0":"46703676086","08-01-0-0":"KATJA"},"dg":10,"rt":33620224},
  {"dt":{"0e-04-0-0":"13910775963","0A-01-0-0":"Du","08-01-0-0":"Peng
  Bo"},"dg":7,"rt":33620224},{"dt":{"0A-01-0-0":"Li","08-01-0-0":"Wen"},"dg":9,"rt":33620224},
  {"dt":{"0A-01-0-0":"wei","08-01-0-0":"melissa."},"dg":3,"rt":33620224},
  {"dt":{"0e-04-0-0":"13910621276","08-01-0-0":"孙永平"},"dg":11,"rt":33620224},
  {"dt":{"0e-04-0-0":"18605351512","0A-01-0-0":"张老师"},"dg":1,"rt":33620224},
  {"dt":{"0e-04-0-0":"13826924038","08-01-0-0":"海光"},"dg":8,"rt":33620224},
  {"dt":{"0e-04-0-0":"13810006938","08-01-0-0":"海晓东"},"dg":12,"rt":33620224},
  {"dt":{"0e-04-0-0":"861E+12","08-01-0-0":"陶徐"},"dg":2,"rt":33620224}]  
  </div>
</body>
</html>

 

因为html页面onload调用一个js函数,但在函数中获取div里的内容出现了问题。

 

Jebber.Upload = {
	doneLoadingFunction: null,
	frameName: "hiddenUploadResponse",
	divId: "up_iframecontent",
	
	submitFileForm: function(submitForm, newCallback)
	{
		Jebber.Debug.print("submitFileForm");
		Jebber.Debug.assert(newCallback != null, "Upload.submitFileForm(): newCallback must not be null.");
		this.doneLoadingFunction = newCallback;
		submitForm.target = this.frameName;
		submitForm.submit();
	},
	
	iFrameLoaded: function()
	{
		Jebber.Debug.print("Upload.iFrameLoaded called. Things are working.");
		Jebber.Debug.print("frame content div undefined?: " + ($J("#" + this.divId).length == 0));
		Jebber.Debug.print("frame content div undefined in the frame?: " + (frames[this.frameName].document.getElementById(this.divId) == null));
		var hiddenIframeContents = frames[this.frameName].document.getElementById(this.divId).innerHTML;
		Jebber.Debug.assert(hiddenIframeContents != "", "Upload.iFrameLoaded: The file was empty. This error should be handled.");
		this.doneLoadingFunction(hiddenIframeContents);
	},

 hiddenIframeContents 的值总是缺少最后的两个括号。

[{"dt":{"0A-01-0-0":"Tang","08-01-0-0":"Eva"},"dg":5,"rt":33620224},
{"dt":{"0e-04-0-0":"667193","0e-09-0-0":"861E+12","0A-01-0-0":"JIANG","08-01-0-0":"GARY"},"dg":4,"rt":33620224},
{"dt":{"0A-01-0-0":"Guo","0e-02-0-0":"861E+12","08-01-0-0":"Hao"},"dg":6,"rt":33620224},
{"dt":{"0e-04-0-0":"46703676086","08-01-0-0":"KATJA"},"dg":10,"rt":33620224},
{"dt":{"0e-04-0-0":"13910775963","0A-01-0-0":"Du","08-01-0-0":"Peng Bo"},"dg":7,"rt":33620224},
{"dt":{"0A-01-0-0":"Li","08-01-0-0":"Wen"},"dg":9,"rt":33620224},
{"dt":{"0A-01-0-0":"wei","08-01-0-0":"melissa."},"dg":3,"rt":33620224},
{"dt":{"0e-04-0-0":"13910621276","08-01-0-0":"孙永平"},"dg":11,"rt":33620224},
{"dt":{"0e-04-0-0":"18605351512","0A-01-0-0":"张老师"},"dg":1,"rt":33620224},
{"dt":{"0e-04-0-0":"13826924038","08-01-0-0":"海光"},"dg":8,"rt":33620224},
{"dt":{"0e-04-0-0":"13810006938","08-01-0-0":"海晓东"},"dg":12,"rt":33620224},
{"dt":{"0e-04-0-0":"861E+12","08-01-0-0":"陶徐"},"dg":2,"rt":33620224

 在这一步出现问题后,就没办法往下走了。请问大家如何解决呀?

已解决:

/**
*若是英文,则没有问题,但如果是中文,string.length()表示字符的个数,例如: 我爱bj,length=4.
*但stream里write 的时候,实际length=8,一个中文字符=3个byte。
*应该取字节的长度。
*/
response.setContentLength(responseText.getBytes("UTF-8").length());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值