使用webuploader上传文件,还要提交文件对应的属性。
思路:使用webuploader选择文件,上传文件,利用response获取到上传成功后,服务器端返回的关于文件的访问地址,名称等其他属性,利用response._raw,获取到原始数据,或者在服务器端将数据添加到json中,返回的数据就是json数据;
返回的数据,添加到表单的隐藏input中,最后提交表单,在服务器端利用request获取到提交的参数,request.getparameter(key),对于多个同名的input,会自动组成一个数组,通过遍历数组,将数据重新组合设置到对象中,存入到数据库中。
这种思路,必须是先上传文件,后提交表单,上传成功返回数据信息,再结合表单提交。
如果是在表单中提交思路就不一样了。
这里应该有一个默认的知识点,就是表单提交的时候,如果有多条同名的输入数据,会自动组成一个字符串数组,且是按顺序组装的。再使用request提取的时候,将字符串分割为数组,顺序提取就能对应上。
删除没有使用的图片:
一、上传了,但是没有和相关数据保存,称为了无用数据
考虑,上传图片先保存到临时文件夹,保存数据后,将关联的数据复制到新的目录中。
二、已经关联的数据,不再使用了
此时,数据已经复制到了最终的目录中,在删除相关的对象和属性的时候,同时删除磁盘中的数据。
三、复制文件问题
参考http://blog.csdn.net/yqs_love/article/details/51959776
问题描述:在项目中创建了两个目录,一个用于存放每次上传的图片,另一个存放最终与对象关联的图片,本人已经在项目中新建了各级目录。
使用代码
/**
* 使用文件通道的方式复制文件
*
* @param s
* 源文件
* @param t
* 复制到的新文件
*/
public static String fileChannelCopy(File sourceFile, File desinationFile) {
String msg = "0";
FileInputStream fi = null;
FileOutputStream fo = null;
FileChannel in = null;
FileChannel out = null;
try {
fi = new FileInputStream(sourceFile);
if(!desinationFile.exists()){
desinationFile.getParentFile().mkdir();
desinationFile.createNewFile();
}
fo = new FileOutputStream(desinationFile);
in = fi.getChannel();//得到对应的文件通道
out = fo.getChannel();//得到对应的文件通道
in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道
msg="1";
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fi.close();
in.close();
fo.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return msg;
}
初始没有删除线的代码,后查看参考文献后,添加了代码。
if(!desinationFile.exists()){
desinationFile.mkdir();
desinationFile.createNewFile();
}
但是项目依旧存在问题,createNewFile()抛出异常。
后更改
if(!desinationFile.exists()){
desinationFile.getParentFile().mkdir();
desinationFile.createNewFile();
}
不再抛出异常,而且新建了最底层的目录和手动在eclipse项目中创建的目录名一样。
网友评论