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

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

作者: supory | 来源:发表于2017-07-28 16:59 被阅读145次

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/kjnakxtx.html