javaWeb实现简单文件上传
本文实例为大家分享了javaweb实现简单文件上传的具体代码,供大家参考,具体内容如下
1.先导入两个包:commons-fileupload-1.3.3.jar,commons-io-2.6.jar。
2.前端页面代码
<fORM action="upLoadfile.do" method="post"
enctype="multipart/form-data">
<input type="text" name="username" /><br>
<input type="file" name="userimg" /><br>
<input type="submit" value="提交" />
</form>
2.Servlet代码
package com.uploadtest.upload;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WEBServlet;
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.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/upLoadfile.do")
public class upLoadfile extends HttpServlet {
private static final long serialVersionUID = 1L;
public upLoadfile() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String saveFileName = ""; //
String oldFileName = ""; // 直接由item.getNam()获取的文件名,有可能获取的是路径,也为了避免重名覆盖,所以要对它进行处理
String newFileName = ""; // 对源文件名进行处理后的名字
// 借助工具解析commons-fileupload smartupload(在项目中导入了jar包)
// 判断传递的是否是文件类型,判断form的enctype的属性值是否是multipart/form-data
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
// 创建FileItem对象的工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 获取Servlet上下文
ServletContext servletContext = null;
servletContext = this.getServletConfig().getServletContext();
// 获取临时文件夹
String str = "javax.servlet.context.tempdir";
File repository = (File) servletContext.getAttribute(str);
factory.setRepository(repository);
// 创建文件上传处理器
ServletFileUpload upload = new ServletFileUpload(factory);
// 解决中文乱码
upload.setHeaderEncoding("utf-8");
// 解析request获取上传的参数
try {
// 使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
List<FileItem> items = upload.parseRequest(request);
// 解决上传文件名的中文乱码
upload.setHeaderEncoding("UTF-8");
// 处理参数
for (FileItem item : items) {
// 判断是否为Form的表单域,即判断是否为普通的数据,若不是则为文件。
if (item.isFormField()) {
String name = item.getFieldName();
// 解决普通输入项的数据的中文乱码问题
String value = item.getString("UTF-8");
// value = new String(value.getBytes("iso8859-1"),"UTF-8");
//System.out.println(name + "=" + value);
} else {
// 设置上传单个文件的大小的最大值,目前是设置为1024*1024*10字节,也就是10MB
upload.setFileSizeMax(1024 * 1024 * 10);
// 写入文件
// 此处本项目在服务器中的路径,为绝对路径,也可以根据需要存入到其他路径
String rootPath = servletContext.getRealPath("//");
// File.separator(相当于添加了一个分隔符),在windows下的路径分隔符(\)和在linux下的路径分隔符(/)是不一样的,当直接使用绝对路径时,跨平台会报异常
String savePath = rootPath + File.separator + "upload";
// String savePath = "E:\\eclipse-workspace\\JAVAWeb\\jsPUploadTest\\fileByupload";
File fileSaveFolder = new File(savePath);
// 如果不存在该文件夹则创建
if (!fileSaveFolder.exists()) {
fileSaveFolder.mkdir();
}
oldFileName = item.getName();
newFileName = processFileName(oldFileName);
saveFileName = savePath + File.separator + newFileName;
// 存储文件
File uploadedFile = new File(saveFileName);
item.write(uploadedFile);
}
}
request.setAttribute("message", "文件上传成功!");
} catch (FileUploadBase.FileSizeLimitExceededException e) {
e.printStackTrace();
request.setAttribute("message", "照片大小不能超过10M");
request.getRequestDispatcher("Show.jsp").forward(request, response);
return;
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setAttribute("saveFileName", saveFileName);
request.setAttribute("newFileName", newFileName);
request.getRequestDispatcher("Show.jsp").forward(request, response);
}
}
// 对文件名进行处理
private String processFileName(String oldFileName) {
// 补充:对于 item.getName()有的浏览器会返回文件名,而有的浏览器会返回“路径”+“文件名”,针对后者我们需要通过“字符串截取”获取文件名
// 例如会出现这样的情况:item.getName():C:\Users\Desktop\备忘录.txt
String tempFileName = "";
int index = oldFileName.lastIndexOf("\\");
if (index != -1) {
// subString(x)是从字符串的第x个字符截取
tempFileName = oldFileName.substring(index + 1);
}
// 为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名
return UUID.randomUUID().toString() + "_" + tempFileName;
}
}
3.图片展示
<p>${message}</p>
<img id="picture" src="upload/${newFileName}" width="200px" height="200px" alt="不是图片">
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关文章