首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用JSP / Servlet将文件上传到服务器?

如何使用JSP / Servlet将文件上传到服务器?

提问于 2017-12-15 07:48:39
回答 2关注 0查看 665

怎样才能使用JSP / Servlet上传文件到服务器?我试过这个:

代码语言:txt
AI代码解释
复制
<form action="upload" method="post">
代码语言:txt
AI代码解释
复制
    <input type="text" name="description" />
代码语言:txt
AI代码解释
复制
    <input type="file" name="file" />
代码语言:txt
AI代码解释
复制
    <input type="submit" />
代码语言:txt
AI代码解释
复制
</form>

但是,我只获取文件名,而不是文件内容。当我添加 enctype="multipart/form-data"到<form>,然后request.getParameter()返回null。

在研究期间,我偶然发现了Apache Common FileUpload。我试过这个:

代码语言:txt
AI代码解释
复制
FileItemFactory factory = new DiskFileItemFactory();
代码语言:txt
AI代码解释
复制
ServletFileUpload upload = new ServletFileUpload(factory);
代码语言:txt
AI代码解释
复制
List items = upload.parseRequest(request); // This line is where it died.

不幸的是,servlet抛出了一个没有明确信息和原因的异常。这里是堆栈跟踪:

代码语言:txt
AI代码解释
复制
SEVERE: Servlet.service() for servlet UploadServlet threw exception
代码语言:txt
AI代码解释
复制
javax.servlet.ServletException: Servlet execution threw an exception
代码语言:txt
AI代码解释
复制
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:313)
代码语言:txt
AI代码解释
复制
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
代码语言:txt
AI代码解释
复制
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
代码语言:txt
AI代码解释
复制
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
代码语言:txt
AI代码解释
复制
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
代码语言:txt
AI代码解释
复制
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
代码语言:txt
AI代码解释
复制
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
代码语言:txt
AI代码解释
复制
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
代码语言:txt
AI代码解释
复制
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
代码语言:txt
AI代码解释
复制
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
代码语言:txt
AI代码解释
复制
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
代码语言:txt
AI代码解释
复制
    at java.lang.Thread.run(Thread.java:637)

回答 2

御姐万岁

发布于 2017-12-15 08:46:13

对于Spring MVC, 我花了几个小时的时间在解答你的问题,并设法作出一个简单的版本,用于表单输入数据和图像。

代码语言:txt
AI代码解释
复制
<form action="/handleform" method="post" enctype="multipart/form-data">
代码语言:txt
AI代码解释
复制
  <input type="text" name="name" />
代码语言:txt
AI代码解释
复制
  <input type="text" name="age" />
代码语言:txt
AI代码解释
复制
  <input type="file" name="file" />
代码语言:txt
AI代码解释
复制
  <input type="submit" />
代码语言:txt
AI代码解释
复制
</form>

控制器来处理

代码语言:txt
AI代码解释
复制
@Controlle
代码语言:txt
AI代码解释
复制
public class FormController {
代码语言:txt
AI代码解释
复制
    @RequestMapping(value="/handleform",method= RequestMethod.POST)
代码语言:txt
AI代码解释
复制
    ModelAndView register(@RequestParam String name, @RequestParam int age, @RequestParam MultipartFile file)
代码语言:txt
AI代码解释
复制
            throws ServletException, IOException {
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
        System.out.println(name);
代码语言:txt
AI代码解释
复制
        System.out.println(age);
代码语言:txt
AI代码解释
复制
        if(!file.isEmpty()){
代码语言:txt
AI代码解释
复制
            byte[] bytes = file.getBytes();
代码语言:txt
AI代码解释
复制
            String filename = file.getOriginalFilename();
代码语言:txt
AI代码解释
复制
            BufferedOutputStream stream =new BufferedOutputStream(new FileOutputStream(new File("D:/" + filename)));
代码语言:txt
AI代码解释
复制
            stream.write(bytes);
代码语言:txt
AI代码解释
复制
            stream.flush();
代码语言:txt
AI代码解释
复制
            stream.close();
代码语言:txt
AI代码解释
复制
        }
代码语言:txt
AI代码解释
复制
        return new ModelAndView("index");
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}

以往V

发布于 2017-12-15 08:44:02

你需要将common-io.1.4.jar文件包含在您的lib目录中,或者如果你使用的是NetBeans等编辑器,则需要转到项目属性,然后添加JAR文件即可完成。

要获取common.io.jar文件你可以百度一下,它或直接去Apache Tomcat的网站,你可以选择免费下载这个文件。但请记住一件事:如果你是Windows用户,请下载二进制ZIP文件。

和开发者交流更多问题细节吧,去 写回答
相关文章
使用helm将本地部署文件上传到harbor chart上
在执行install.sh安装脚本时,通过--with-chartmuseum参数安装chart插件。
章工运维
2023/06/13
3.1K0
使用helm将本地部署文件上传到harbor chart上
JSP 编译原理:JSP 是 Servlet?如何用 Eclipse 查看 JSP 编译生成的 Servlet 源文件?
相信大家都了解,JSP 页面在请求的时候会先被 Tomcat 编译为 Servlet(Servlet 是用 Java 语言编写的服务器端程序),然后再由 Java 编译器编译为以 .class 结尾的中间字节码文件,最后再编译为机器能识别的二进制机器码文件。我们通过使用 Eclipse 演示一个小案例,了解 JSP 编译原理的同时来帮大家找到并剖析编译后生成的 Servlet 的 Java 代码文件。
白鹿第一帅
2022/05/08
3K0
JSP 编译原理:JSP 是 Servlet?如何用 Eclipse 查看 JSP 编译生成的 Servlet 源文件?
将文件自动上传到FTP服务器
将文件代码另存为.bat文件,双击运行后会将E盘中的所有的txt文件上传到我们指定的服务器。
逍遥子大表哥
2021/12/17
3.8K0
如何将IDEA上的项目上传到GitHub上?
最近,找到了一个去年用Springboot完成的一个web类博客项目,于是想到了上传到GitHub上开源分享。相信还有一部分刚入"IT"圈的编程小白(请忽略我也是一个菜鸟…),于是正好利用这个机会做一期记录。
大数据梦想家
2021/01/27
7.2K0
如何将IDEA上的项目上传到GitHub上?
Servlet下载服务器上的文件Demo
this.getServletContext().getMimeType(“文件名称”)
老九学堂-小师弟
2019/09/25
2.6K0
【玩转腾讯云】linux服务器,将文件上传到服务器
输入rz命令后,会弹出对话框,选择你要上传的文件,选择打开就上传到Linux主机。上传的文件在当前命令行的目录下
用户2472555
2022/03/20
33.3K0
【玩转腾讯云】linux服务器,将文件上传到服务器
输入rz命令后,会弹出对话框,选择你要上传的文件,选择打开就上传到Linux主机。上传的文件在当前命令行的目录下
用户7087577
2020/04/02
42.7K1
【玩转腾讯云】linux服务器,将文件上传到服务器
Servlet和JSP
Servlet和JSP是Java Web开发中最常用的两种技术,它们都属于JavaEE技术栈的一部分。本文将详细介绍Servlet和JSP的概念、特点、应用场景以及示例代码。
堕落飞鸟
2023/04/04
8760
jsp、servlet笔记
1、init    初始化Jsp&Servlet方法    destroy 销毁Jsp&Servlet之前的方法    service 对用户请求生成响应的方法 2、Jsp文件必须在jsp服务器内运行
用户1141560
2017/12/26
9910
iOS-将项目上传到 GitHub 上
创建项目 进入GitHub主页,创建新代码仓库,注册相关事宜不再赘述(见下图): 二、给你的新代码仓库起名称(可以是项目的名称或者 Demo 的文件名称)--->给你仓库添加描述(方便别人理解用途)--->点击“创建”(见下图): 步骤二.png 三、点击“创建”后会生成相应的 github 网址,这个网址就是以后上传项目的地址(见下图): 步骤三.png 四、接着用 Xcode 创建工程,记得勾选创建 Git 代码仓库(见下图): 步骤四.png 五、在导航栏找到“配置工程”选项(见下
用户1890628
2018/05/10
2.8K0
浅谈Servlet与JSP
提高Java Web 开发,不得不说http协议,接下来就说Servlet 和 Jsp 这两个java类。
全栈程序员站长
2022/09/07
6870
浅谈Servlet与JSP
jsp跳转jsp----------和------------jsp跳转servlet跳转jsp
2.也可以在上面先得到前一个jsp页面传来的参数,再讲参数放到request或者其他域中, 然后使用${username}得到
2020/10/23
22.4K0
Servlet-JSP入门
作用:主要作用是代替Servlet程序回传html页面的数据。因为Servlet程序回传html页面数据是一件非常繁琐的事情,开发成本和维护成本都很高。
全栈程序员站长
2022/09/21
4650
Servlet-JSP入门
idea如何运行Java Web项目(Servlet、JSP)
很久以前用Servlet、JSP写了个小项目,写了玩的,地址:https://blog.csdn.net/qq_37855749/article/details/110492060
全栈程序员站长
2022/09/08
12.7K0
idea如何运行Java Web项目(Servlet、JSP)
JSP Servlet简单实现
Jsp和Servlet个人感觉使用起来没有太大区别的,查了一下,说是jsp是Servlet的简化。这说明其本质是一样的,这里简单实现一下jsp和Servlet交互,比较简单,就不多说了,看代码吧。
the5fire
2019/02/28
1.6K0
Servlet和JSP总结
##响应数据乱码 -为什么出现乱码,因为输出响应数据默认使用的是iso8859-1 需要把此编码改成utf-8
爱撒谎的男孩
2019/12/31
2.6K0
点击加载更多

相似问题

怎样将本地文件上传到腾讯云服务器?

38.7K

上传到COS上的文件丢失?

11.6K

怎么把模板域名上传到服务器上?

1261

如何把网络助手传到云上?

2316

腾讯云服务器web文件上传到哪个目录?

32.4K
相关问答用户
新浪微博 | 高级总监擅长4个领域
某公司 | 程序员擅长1个领域
腾讯云TDP | 产品KOL擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档