如何使用字节流代替FileItem上传zip等文件

如何使用字节流代替FileItem上传zip等文件,第1张

FileItem有个方弯凳法write(file),write方法将FileItem对象中的内容保滚橘存到某个指定的文件中。如果FileItem对象中的内容是保存在某个临时文件中,该方法完成后,临时文件可以会被删除。

该方法也可以将普通表单埋备旅字段保存在一个文件中,但最主要的用途是把上传的文件内容保存在本地文件系统中。

首先你要有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)} } }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12338555.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存