前面写了多文件上传,但是没有改进,上一个方法必须要让每一个文件input标签对应一个数据库字段,也就是说上传多少个文件就要创建多少个数据库的字段,非常的不合理,这里改进一下,数据库中只设置一个字段,所有文件的名字保存在这一个字段中。
只有以下代码不同可参考上一篇多文件上传文章的完整代码:
for(FileItem fileItem :fileItemList )
{
if(fileItem.isFormField()) //表示是普通参数,不是文件.下面为拼凑sql命令insert串做准备
{
sqlfiestr1=sqlfiestr1+fileItem.getFieldName()+",";//fileItem.getFieldName()获取input标签的name名字
System.out.println(fileItem.getFieldName());
try {
sqlvalSTR1=sqlvalSTR1+"'"+fileItem.getString("utf-8")+"',";//fileItem.getString("utf-8")获取值
System.out.println(fileItem.getString("utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} //要加编码,否则取出来汉字可能是乱码
}
/*fileItem.getName()有些浏览器可以直接获取到文件名,不需要处理
但是如果有的浏览器获取的是带有路径的名字,这里要处理后才可以拼接fileinputnames*/
else //当前项是文件流,要把数据写入磁盘
{
String tempFileinputname=fileItem.getFieldName();//文件标签名
String tempFilename=fileItem.getName();//文件名
//处理文件名字
int po=tempFilename.lastIndexOf("\\"); //只保留后面的文件名,不要前面路径
if(po!=-1)//说明找到了右斜杠\
{ tempFilename=tempFilename.substring(po+1);}
//处理文件名完毕
boolean status = sqlfiestr1.contains(tempFileinputname);
if(tempFilename==""||tempFilename.equals(""))//如果没有上传文件,什么也不做
{ }
//有上传文件就添加sql语句,并写入磁盘
else if(status)//已经包含pic字段
{
System.out.println("2");
String oldFileNames=fileNames;
fileNames+="/"+tempFilename;
System.out.println("所有文件的名字:"+fileNames);
System.out.println("所有匹配的数据库中的文件字段名:"+tempFileinputname);
System.out.println("sql拼接的字段名:"+sqlfiestr1);
// 修改fileNames的值
System.out.println("替换文件名前:"+sqlvalSTR1);
/*sqlvalSTR1.replace(oldFileNames,fileNames); //这里有问题!!!!!!!!!!!!,搞了半天原来是要重新赋值给该字符串*/
sqlvalSTR1=sqlvalSTR1.replace(oldFileNames,fileNames);//这样就可以替换了
System.out.println("替换文件名后:"+sqlvalSTR1);
savefile(fileItem, path1);//把上传文件写入磁盘中,即保存上传文件
}
else{//不包含pic字段
System.out.println("1");
fileNames+=tempFilename;//只有一張照片时,没有/,从第二张照片开始前面加一个/
sqlfiestr1=sqlfiestr1+tempFileinputname+",";//fileItem.getFieldName()获取input标签的name名字
sqlvalSTR1=sqlvalSTR1+"'"+fileNames+"',";//所有上传文件的名字
savefile(fileItem, path1);//把上传文件写入磁盘中,即保存上传文件
}
}
}
版权声明:本文为weixin_45947938原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。