实现多文件上传且文件位置任意,所有文件的名字保存在数据库中的一个字段中,不分开保存,文件名之间以字符/间隔

        前面写了多文件上传,但是没有改进,上一个方法必须要让每一个文件input标签对应一个数据库字段,也就是说上传多少个文件就要创建多少个数据库的字段,非常的不合理,这里改进一下,数据库中只设置一个字段,所有文件的名字保存在这一个字段中。

只有以下代码不同可参考上一篇多文件上传文章的完整代码:

Web后端—带文件和文本数据的form表单,使用Ajax的FormData获取表单数据上传到servlet,后端调用写的工具类FormPostUtil接收文件文本数据,最后存储到数据库中。_酒鬼酒!!!的博客-CSDN博客问题分析:当前端form表单传数据到后端时,会有一个非常棘手的问题:数据里面有没有文件数据呢??因为有与没有的处理方式是不一样的。现在就设计前端使用Ajax申请技术,后端接收请求的同时自动判断form表单数据有没有文件数据,如果有文件数据就就要处理文件流保存到指定路径。那么如何去判断form表单传来的数据有没有包含文件流呢?这里使用的思想和工具是FileItem类 、ServletFileUpload 类、DiskFileItemFactory类。使用这三个工具就可以把前端form表单中的所有https://blog.csdn.net/weixin_45947938/article/details/124302991?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22124302991%22%2C%22source%22%3A%22weixin_45947938%22%7D&ctrtid=qpBY4

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版权协议,转载请附上原文出处链接和本声明。