文本和多媒体文件混合上传

Servlet3.0新增了request.getParts()/getPart(String filename) api,用于获取使用multipart/form-data格式传递的http请求的请求体,通常用于获取上传文件。

核心代码:

1 Part part = request.getPart("file");//获取类型为“file”的表单项
2 String name = part.getHeader("content-disposition");//获取文件名
3 String random_name = UUID.randomUUID().toString()+ name.substring(name.lastIndexOf("."), name.length() - 1);//生成uuid码,截取文件扩展名 组合成新的唯一文件名
4 String filename = request.getServletContext().getRealPath("/upload") + "\\" + random_name;//获取保存路径(这里获取项目根目录下的upload文件夹路径),拼接成完整文件路径
5 part.write(filename);//根据完整文件路径写入保存

 

测试案例:

JSP文件

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>文件上传</title>
</head>
<body>    
<form action="upload" enctype="multipart/form-data" method="post">
    文本一:<input type="text" name="text1"/><br>
    文本二:<input type="text" name="text2"/><br>
    选择文件:<br>
    <input type="file" name="fileName"/>
    <input type="submit" value="上传" />

</form>
</body>
</html>

Servlet文件

package control;

import java.io.IOException;
import java.util.UUID;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@SuppressWarnings("serial")
@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    @Override
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //RequestDispatcher rd = request.getRequestDispatcher("/test2.jsp");
        String text1 = request.getParameter("text1");
        String text2 = request.getParameter("text2");
        System.out.println(text1+" "+text2);
        
        Part part = request.getPart("fileName");
        String name = part.getHeader("content-disposition");
        String random_name = UUID.randomUUID().toString() + name.substring(name.lastIndexOf("."), name.length() - 1);
        String filename = request.getServletContext().getRealPath("/upload") + "\\" + random_name;
        System.out.println(filename);
        part.write(filename);

        //rd.forward(request, response);
    }

}

点击上传后,eclipse报错

F:\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\server\upload\d84a17a2-2ec2-4517-872c-68131d551d16.jpg (系统找不到指定的路径。)

因为eclipse写代码的项目和真正运行的项目不在同一路径

进入上述报错的根路径,新建upload文件夹

 

 

 再次运行,控制台显示正确的text1、text2以及文件路径值

1111 aaaa
F:\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\server\upload\38749453-f2cc-4a05-b877-e21a7718a890.jpg

进入该文件路径查看,文件已经保存

 

 

除了图片,音频视频等文件同理。

 

发布了46 篇原创文章 · 获赞 0 · 访问量 270
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览