关于上传文件和提交表单的结合+复制文件问题

2017-07-28  本文已影响145人  supory

使用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项目中创建的目录名一样。

上一篇下一篇

猜你喜欢

热点阅读