该方法也可以将普通表单埋备旅字段保存在一个文件中,但最主要的用途是把上传的文件内容保存在本地文件系统中。
首先你要有jar包:commons-fileupload-1.3.1.jar和commons-io-2.2.jar两个包!当你要上传时:
<form action="./UploadServlet1" enctype="multipart/form-data"
method="post">
文本1:<input type="text" name="text1" value="文本1"><br>
文件2:<input type="text" name="text2" value="文本2"><br>
文件1:<input type="file" name="file1"><br>
文件2:<input type="file" name="file2"><br>
文件2:<input type="file" name="file3"><br>
<input type="submit" value="开始上传">
</form>
当form表单提交时会有上传文件和非上传文件
所以在servlet中,第一步要进行判断表单的提并薯交方式
boolean isMultipart = ServletFileUpload.isMultipartContent(request)
if(!isMultipart){
throw new RuntimeException("请检查您的表单的enctype属性,确定是multipart/form-data")
}
第二步要对数据进行接收:
DiskFileItemFactory factory = new DiskFileItemFactory()
//构造好一个DiskFileItemFactory的对象
ServletFileUpload uploader = new ServletFileUpload(factory)
//解析请求
List<FileItem>items = null
try {
items = uploader.parseRequest(request)
//将请求解析,并脊蔽运将数据封装在FileItem的对象中,并将这些对象装入List中返回
} catch (FileUploadException e) {
e.printStackTrace()
}
其次要对表单提交的内容进行是否为上传文件的分类处理:
利用isFormField()来进行判断
for(FileItem item : items){
if (item.isFormField()) {
// 处理普通表单域
String field = item.getFieldName()// 表单域名
String value = item.getString("UTF-8")
System.out.println("普通表单")
} else {
// 将临时文件保存到指定目录
String fileName = item.getName()// 文件名称
fileName = UUID.randomUUID().toString()+"_"+FilenameUtils.getName(fileName)
String extension = FilenameUtils.getExtension(fileName)
String filepath = "您希望保存的目录/" + fileName
item.write(new File(filepath))
/樱梁/将路径执行保存
}
}
这样就完成了文件上传,希望能帮到你。
如果通过servelet来读取上传文件路径,则代码如下,我已经在项目中用过了:
DiskFileItemFactory difif = new DiskFileItemFactory()difif.setSizeThreshold(32*1024)difif.setRepository(new File(tmpDir))// 用以上工厂实例化上传组件孙拆ServletFileUpload sfu = new ServletFileUpload(difif)sfu.setSizeMax(MAX_SIZE)List fileList = sfu.parseRequest(request)if ( fileList == null || fileList.size() == 0) { throw new Exception(" 导入文件不存在,请检 查")} else { File upLoadFile = nullIterator fileIterator = fileList.iterator()//得到所有上传的文 件 while (fileIterator.hasNext()) { FileItem fileItem = (FileItem)fileIterator.next()// 取得上传文件 名 if (fileItem.getContentType() == null) { } else { // 此为路 径 String path = fileItem.getName()String t_ext = path.substring(path.lastIndexOf(".") + 1)// 根据系统时间生成上传后保存的文件 名裤销 String prefix = String.valueOf(System.currentTimeMillis())// 保存最终的文件完整路径,保存在工程根目录下的Upload目录 下 String u_name = tmpDir + File.separator + prefix + "." + t_ext// 开胡凯游始保存文 件 upLoadFile = new File(u_name)fileItem.write(upLoadFile)} } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)