commons-fileupload上传文件(图片)时路径写入数据库时斜杠的问题

前端:常规的二进制form表单,这里不赘述了。

后端:常规的Java servlet处理数据。其关键的代码如下:

String _today = new SimpleDateFormat("yyyyMMdd")
		.format(new java.util.Date());
// 保存的最终文件路径(服务器端),其中realwebbase是通过request.getSession().getServletContext().getRealPath("/");方法获取的服务器路径。
String u_name = realwebbase + "upload/letterPic/" + _today
		+ "/" + MyUtil.getUUID() + "." + t_ext;
try {
	// --------------------5------------------保存文件-----------------------------
	File _today_file = new File(realwebbase + "upload/letterPic/" + _today); // 构建文件目录
	if (!_today_file.exists()) {
		_today_file.mkdirs();
	}
	fileItem.write(new File(u_name));
	hm.put("letter_pic", u_name);//hm是一个作为返回值的HashMap对象
	hm.put("msg", "success");
} catch (Exception e) {
	// TODO: handle exception
	e.printStackTrace();
}
这样写的话,在服务器端可以看到最终图片的上传路径为:
图片路径::D:\javasoft\apache-tomcat-6.0.10\webapps\xinyu\upload/letterPic/20170428/e3460fe5-8f81-4fb6-8eba-ae33cbeaa27a.jpg
看到那方向不一致的斜杠,心想:坏了!!果然,打开数据看数据的时候发现 右斜杠并没有作为一个字符写进去(也许写入数据库的时候右斜杠被视为一个转义符号了)。反而写入的是这么一串东西: 结果图---可以发现右斜杠其实已经完全被过滤了。

【为什么会出现这种情况?如何避免?】

这种情况的出现,是因为写入数据库的时候相应处理进程把右斜杠“\”当做转义符了——这样就导致读取文件路径的时候无法找到正确的文件。

网络上的以“\\”代替“\”的方法行不通!这样做获得的一串没有斜杠的字符串;

网络上的以“#6”编码代替“\”的方法也行不通!这样做获得的也是一串没有斜杠的字符串;

正确的解决方法:

1、可以通过替换字符,将转义符换成左斜杠;

2、字符串截取,创建文件/保存文件的时候使用绝对路径,写入数据库的时候用相对路径;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值