action
- bigItem
- 要点
- 使用smartupload jar 包
- html 表单提交数据有三种类型的提交
bigItem
做项目,发现了一个技术难点。
要上传图片到服务器。
要点
1,smartupload jar 包下载。
2,部署jar包
使用smartupload jar 包
Jsp页面操作
<html><head><base href="<%=basePath%>"><title>TEST JSP UPLOAD IMAGE TO SERVER</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"></head><body><form action="getImage" method="post" enctype="multipart/form-data" onsubmit="return checkForm(this)"><input type = "file" name = "image"> <input type = "submit" value = "提交"> </form></body><script type="text/javascript">function checkForm(form) {var img = form.image.value;if (!img.endsWith(".jpg") && !img.endsWith(".gif") && !img.endsWith(".png")) {alert("仅支持jpg, gif, png上传");return false;}return true;}</script>
</html>
servlet 页面
package com.lovely.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.jspsmart.upload.File;
import com.jspsmart.upload.Files;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;public class GetImage extends HttpServlet {/*** @date 2020年3月24日下午7:17:11*/private static final long serialVersionUID = 6901834962584549039L;@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {req.setCharacterEncoding("utf-8"); SmartUpload upload = new SmartUpload();// 注释的方法初始化既复杂 又难记住 暂时pass/*// servlet request response errorPageUrl needsSession buffer autoflushPageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this, req, resp, null, true, 8192, true);*/// 初始化对象upload.initialize(getServletConfig(), req, resp);// 设置上传的类型upload.setAllowedFilesList("jpg,png,gif");try {// 开始上传upload.upload();// 获取上传文件集Files files = upload.getFiles();// 得到第一个文件File file = files.getFile(0);// 文件的类型System.out.println(file.getFieldName());System.out.println(file.getFileName());// 得到文件的后缀//String ext = file.getFileExt();// 获取毫秒值 为了解决文件同名的问题long millis = System.currentTimeMillis();// 服务器下的webapps下 创建的文件夹 里面的图片文件。String path = "Image/" + millis + file.getFileName();// millis + file.getFileName() 便是插入数据库的了。// 保存文件file.saveAs(path);} catch (SmartUploadException e) {e.printStackTrace();}}}
一个注意点!!!
html 表单提交数据有三种类型的提交
1,application/x-www-form-urlencoded 数据在发送前所有字符都会被编码 (默认)
2,multipart/form-data 没有字符被编码。这个值用于控制表单文件的上传(二进制)
3,text/plain 空格转换为"+"符号,但没有特殊字符 编码(纯文本)
注意了…
以第二种方式上传multipart/form-data 上传文件,用httpServletRequest是取不到值的,因为它取值的是字符。
所以要用SmartUpload().getRequest().getParameter(“name”);取值。
而且还要注意要在 smartUpload().upload();上传后取值。要不然一直null…
哈哈哈