当前位置:首页 » 文件管理 » java上传组件

java上传组件

发布时间: 2025-08-18 11:23:02

java怎么用commons-fileupload实现上传文件

文件上传步骤:
1.导入jar包
common-fileupload.jar
common-io.jar
2.上传jsp页面编辑
<body>
<formaction="${pageContext.request.contextPath}/servlet/UploadHandleServlet"enctype="multipart/form-data"method="post">
上传用户:<inputtype="text"name="username"><br/>
上传文件1:<inputtype="file"name="file1"><br/>
上传文件2:<inputtype="file"name="file2"><br/>
<inputtype="submit"value="提交">
</form>
</body>
3.消息提示页面(成功or失败)
<body>
${message}
</body>
4.处理文件上传的servlet编写
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.List;
importjava.util.UUID;

importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.commons.fileupload.FileItem;
importorg.apache.commons.fileupload.FileUploadBase;
importorg.apache.commons.fileupload.ProgressListener;
importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
importorg.apache.commons.fileupload.servlet.ServletFileUpload;

{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
StringsavePath=this.getServletContext().getRealPath("/WEB-INF/upload");
//上传时生成的临时文件保存目录
StringtempPath=this.getServletContext().getRealPath("/WEB-INF/temp");
FiletmpFile=newFile(tempPath);
if(!tmpFile.exists()){
//创建临时目录
tmpFile.mkdir();
}

//消息提示
Stringmessage="";
try{
//使用Apache文件上传组件处理文件上传步骤:
//1、创建一个DiskFileItemFactory工厂
DiskFileItemFactoryfactory=newDiskFileItemFactory();
//设置工厂的缓冲区的大小,当上传的文件大小超过缓冲区的大小时,就会生成一个临时文件存放到指定的临时目录当中。
factory.setSizeThreshold(1024*100);//设置缓冲区的大小为100KB,如果不指定,那么缓冲区的大小默认是10KB
//设置上传时生成的临时文件的保存目录
factory.setRepository(tmpFile);
//2、创建一个文件上传解析器
ServletFileUploapload=newServletFileUpload(factory);
//监听文件上传进度
upload.setProgressListener(newProgressListener(){
publicvoipdate(longpBytesRead,longpContentLength,intarg2){
System.out.println("文件大小为:"+pContentLength+",当前已处理:"+pBytesRead);
/**
*文件大小为:14608,当前已处理:4096
文件大小为:14608,当前已处理:7367
文件大小为:14608,当前已处理:11419
文件大小为:14608,当前已处理:14608
*/
}
});
//解决上传文件名的中文乱码
upload.setHeaderEncoding("UTF-8");
//3、判断提交上来的数据是否是上传表单的数据
if(!ServletFileUpload.isMultipartContent(request)){
//按照传统方式获取数据
return;
}

//设置上传单个文件的大小的最大值,目前是设置为1024*1024字节,也就是1MB
upload.setFileSizeMax(1024*1024);
//设置上传文件总量的最大值,最大值=同时上传的多个文件的大小的最大值的和,目前设置为10MB
upload.setSizeMax(1024*1024*10);
//4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
List<FileItem>list=upload.parseRequest(request);
for(FileItemitem:list){
//如果fileitem中封装的是普通输入项的数据
if(item.isFormField()){
Stringname=item.getFieldName();
//解决普通输入项的数据的中文乱码问题
Stringvalue=item.getString("UTF-8");
//value=newString(value.getBytes("iso8859-1"),"UTF-8");
System.out.println(name+"="+value);
}else{//如果fileitem中封装的是上传文件
//得到上传的文件名称,
Stringfilename=item.getName();
System.out.println(filename);
if(filename==null||filename.trim().equals("")){
continue;
}
//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:c:a1.txt,而有些只是单纯的文件名,如:1.txt
//处理获取到的上传文件的文件名的路径部分,只保留文件名部分
filename=filename.substring(filename.lastIndexOf("\")+1);
//得到上传文件的扩展名
StringfileExtName=filename.substring(filename.lastIndexOf(".")+1);
//如果需要限制上传的文件类型,那么可以通过文件的扩展名来判断上传的文件类型是否合法
System.out.println("上传的文件的扩展名是:"+fileExtName);
//获取item中的上传文件的输入流
InputStreamin=item.getInputStream();
//得到文件保存的名称
StringsaveFilename=makeFileName(filename);
//得到文件的保存目录
StringrealSavePath=makePath(saveFilename,savePath);
//创建一个文件输出流
FileOutputStreamout=newFileOutputStream(realSavePath+"\"+saveFilename);
//创建一个缓冲区
bytebuffer[]=newbyte[1024];
//判断输入流中的数据是否已经读完的标识intlen=0;
//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
while((len=in.read(buffer))>0){
//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath+"\"+filename)当中
out.write(buffer,0,len);
}
//关闭输入流
in.close();
//关闭输出流
out.close();//删除处理文件上传时生成的临时文件//item.delete();message="文件上传成功!";
}
}
}catch(FileUploadBase.){
e.printStackTrace();
request.setAttribute("message","单个文件超出最大值!!!");
request.getRequestDispatcher("/message.jsp").forward(request,response);
return;
}catch(FileUploadBase.SizeLimitExceededExceptione){
e.printStackTrace();
request.setAttribute("message","上传文件的总的大小超出限制的最大值!!!");
request.getRequestDispatcher("/message.jsp").forward(request,response);
return;
}catch(Exceptione){
message="文件上传失败!";
e.printStackTrace();
}
request.setAttribute("message",message);
request.getRequestDispatcher("/message.jsp").forward(request,response);
}
privateStringmakeFileName(Stringfilename){//2.jpg
//为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名
returnUUID.randomUUID().toString()+"_"+filename;
}
privateStringmakePath(Stringfilename,StringsavePath){
//得到文件名的hashCode的值,得到的就是filename这个字符串对象在内存中的地址
inthashcode=filename.hashCode();
intdir1=hashcode&0xf;//0--15
intdir2=(hashcode&0xf0)>>4;//0-15
//构造新的保存目录
Stringdir=savePath+"\"+dir1+"\"+dir2;//upload23upload35
if(!file.exists()){
file.mkdirs();
}
returndir;
}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
doGet(request,response);
}
}
5.编写web.xml文件(servlet的映射配置)
<servlet>
<servlet-name>UploadHandleServlet</servlet-name>
<servlet-class>me.gacl.web.controller.UploadHandleServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>UploadHandleServlet</servlet-name>
<url-pattern>/servlet/UploadHandleServlet</url-pattern>
</servlet-mapping>


注:网上看到的,出处找不到了,望见谅!!

Ⅱ javaweb项目java后台获取前台js上传文件的路径

在Java Web项目中,若要从前端JavaScript接收并处理上传的文件,可以通过Servlet来实现这一功能。具体来说,可以使用Apache Commons FileUpload库来解析上传文件。以下是使用DiskFileItemFactory和ServletFileUpload来读取上传文件路径的代码示例,我在项目中已经成功应用过该代码。

首先,我们创建一个DiskFileItemFactory实例,并设置其大小阈值和临时文件存储路径。接着,通过该工厂实例化上传组件ServletFileUpload,并设置最大文件大小限制。

接下来,我们调用ServletFileUpload的parseRequest方法来解析请求中的文件列表。如果解析结果为空或为空列表,则抛出异常,表示没有文件被上传。否则,我们遍历这些文件项,获取每个文件的名称,然后将其保存到指定的目录。

具体代码如下:

DiskFileItemFactory difif = new DiskFileItemFactory();

difif.setSizeThreshold(32 * 1024);

difif.setRepository(new File(tmpDir));

ServletFileUpload sfu = new ServletFileUpload(difif);

sfu.setSizeMax(MAX_SIZE);

List file_list = sfu.parseRequest(request);

if (file_list == null || file_list.size() == 0) {

throw new Exception("没有文件被上传");

} else {

File upLoadFile = null;

Iterator file_iterator = file_list.iterator();

// 获取所有上传的文件

while (file_iterator.hasNext()) {

FileItem file_item = (FileItem) file_iterator.next();

// 获取上传文件名

if (file_item.getContentType() == null) {

} else {

// 文件路径

String path = file_item.getName();

String t_ext = path.substring(path.lastIndexOf(".") + 1);

// 开始保存文件

upLoadFile = new File(u_name);

file_item.write(upLoadFile);

}

}

}

通过这种方式,我们可以成功地从前端接收文件并保存到服务器端。需要注意的是,上述代码中的tmpDir和MAX_SIZE等变量需要根据实际情况进行设置。

总结来说,通过设置DiskFileItemFactory的大小阈值和临时文件存储路径,并使用ServletFileUpload来解析请求中的文件列表,我们可以实现从前端JavaScript上传文件到Java后台的功能。

Ⅲ Java21 + SpringBoot3集成七牛云对象存储OSS,实现文件上传

在进行Java21与SpringBoot3集成七牛云对象存储OSS的项目中,我设计了一款可适应多端、功能完备的模板工程。此项目包含后台管理系统与前台系统,旨在方便开发者基于此项目快速完成自身功能开发。项目采取前后端分离开发模式,后端使用Java21和SpringBoot3,结合Spring Security、JWT、Spring Data JPA等技术栈;前端则提供了vue、angular、react、uniapp、微信小程序等多款脚手架工程。


项目地址:https://gitee.com/breezefaith/fast-alden


在项目中,我选用了七牛云对象存储Kodo作为云端文件存储中心,本文着重介绍了如何在SpringBoot中集成七牛云OSS,以及结合前端使用Element Plus库的Upload组件实现文件上传功能。


首先,在pom.xml中引入了七牛云及其相关依赖,同时引入了lombok以简化代码编写。


接着,在application.yml配置文件中自定义了七牛云相关配置信息。


紧接着,我创建了七牛云配置类和文件操作服务类接口,并在文件操作服务实现类中基于七牛云SDK实现了文件操作功能。在调用Region.huadongZheJiang2()时,需确保与自己存储空间所属区域保持一致,本文使用的是华东-浙江2区域。


前端部分,本工程基于Vue3组合式API开发,使用Element Plus作为UI库,并借助Upload组件实现文件上传功能。在使用Upload组件时,并未直接使用其action属性,而是通过http-request和on-success属性自定义了文件上传流程。


项目运行效果良好,上传文件操作顺利实现。在后续开发中,我不断更新学习心得和经验总结,期望与各位开发者共同进步。


如文中存在错误之处,还请大家批评指正。期待与各位在技术探索的道路上携手前行。

热点内容
vbs脚本按键 发布:2025-08-18 13:52:06 浏览:513
服务器cdn换ip影响收录吗 发布:2025-08-18 13:46:44 浏览:76
androiddeploy编译可执行程序 发布:2025-08-18 13:36:28 浏览:6
编译原理子树是什么 发布:2025-08-18 13:34:50 浏览:72
小孩学编程先学什么 发布:2025-08-18 13:32:35 浏览:710
输网址找不到服务器ip地址 发布:2025-08-18 13:32:33 浏览:775
什么是路由器缓存 发布:2025-08-18 13:28:48 浏览:250
红旗车什么配置 发布:2025-08-18 13:28:47 浏览:997
干坤脚本 发布:2025-08-18 13:27:06 浏览:1000
我的世界如何开通云隙服务器 发布:2025-08-18 13:23:11 浏览:16