下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IoUtils;
public class FileUpload extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//指定文件存放目录
String storePath=getServletContext().getRealPath("WEB-INF/files");
File file=new File(storePath);
//如果目录不存在,需要创建
if(!file.exists()){
file.mkdirs();
}
//要检查是不是enctype=multipart/form-data提交过来的数据
boolean isMultipart=ServletFileUpload.isMultipartContent(request);
//如果不是,需要处理
if(!isMultipart){
out.write("请将enctype设置成multipart/form-data类型");
response.setHeader("Refresh","1;URL="+request.getContextPath());
return;
}
//去生成一个文件上传的FileUpload对象
DiskFileItemFactory factory=new DiskFileItemFactory();
//设置一个临时目录
//factory.setRepository(new File("E:/temp"));temp文件需要临时创建,我已经删掉了
ServletFileUpload upload=new ServletFileUpload(factory);
//将用户的请求转化为List
try {
List items=upload.parseRequest(request);
//遍历List中的数据
for (FileItem item : items) {
//如果部分文件没有上传
if("".equals(item.getName())){
continue;
}
//判断是普通字段
if(item.isFormField()){
String fieldName=item.getFieldName();
String fieldValue=item.getString("UTF-8");
System.out.println(fieldName+":"+fieldValue);
}else{
//是上传的文件
//需要获取文件名,有可能是路径
String fileName=item.getName();
fileName=fileName.substring(fileName.lastIndexOf(File.separator)+1);
//文件名同名问题
fileName=UUID.randomUUID().toString()+"_"+fileName;
//解决一个文件夹下的文件过多的问题
//用时间来生成子目录
//String childPath=generateDir(storePath);
//用hashcode来生成子目录
String childPath=generateDir(storePath,fileName);
//获取上传文件的数据
InputStream is=item.getInputStream();
OutputStream os=new FileOutputStream(storePath+File.separator+childPath+File.separator+fileName);
IoUtils.copy(is,os);
os.close();
is.close();
//item.delete();//清空临时文件
}
}
out.write("文件上传成功继续上传");
} catch (FileUploadException e) {
e.printStackTrace();
}
}
private String generateDir(String storePath,String fileName) {
int hashcode=fileName.hashCode();
int dir1=hashcode & 0xf;
int dir2=(hashcode & 0xf0)>>4;
String childPath=dir1+File.separator+dir2;
File file=new File(storePath,childPath);
if(!file.exists()){
file.mkdirs();
}
return childPath;
}
private String generateDir(String storePath) {
DateFormat df=new SimpleDateFormat("yyyyMMddhhmmss");
String childPath=df.format(new Date());
File file=new File(storePath,childPath);
if(!file.exists()){
file.mkdirs();
}
return childPath;
}
public void doPost(HttpServletRequest request,IOException {
this.doGet(request,response);
}
}
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
总结
以上是编程之家为你收集整理的Java实现文件上传代码全部内容,希望文章能够帮你解决Java实现文件上传代码所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250