java web 图片上传和文件上传实例详解
这里有新鲜出炉的 Java 设计模式, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了 java web 图片上传和文件上传实例详解的相关资料, 这里提供了两种方法及示例代码, 需要的朋友可以参考下
java web 图片上传和文件上传
图片上传和文件上传本质上是一样的, 图片本身也是文件文件上传就是将图片上传到服务器, 方式虽然有很多, 但底层的实现都是文件的读写操作
注意事项
1.form 表单一定要写属性 enctype="multipart/form-data"
2. 为了能保证文件能上传成功 file 控件的 name 属性值要和你提交的控制层变量名一致,
例如空间名是 file 那么你要在后台这样定义
- private File file; //file 控件名
- private String fileContentType;// 图片类型
- private String fileFileName; // 文件名
1.jsp 页面
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <meta http-equiv="pragma" content="no-cache" />
- <base target="_self">
- <title > 文件上传</title>
- </head>
- <body>
- <form method="post" action=""enctype="multipart/form-data">
- <input type="file" name="file" value="file">
- <input type="submit" value="确定">
- </form>
- </body>
- </html>
1. 页面数据需要提交的 Controller
- package com.cpsec.tang.chemical.action;
- import java.io.File;
- import java.io.IOException;
- import java.util.Random;
- import javax.annotation.Resource;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.commons.io.FileUtils;
- import org.apache.struts2.ServletActionContext;
- import org.springframework.stereotype.Controller;
- import com.cpsec.tang.chemical.biz.LunboBiz;
- import com.cpsec.tang.chemical.entity.Image;
- import com.opensymphony.xwork2.ActionSupport;@Controller("lunboAction") public class LunboAction extends ActionSupport {
- /**
- *
- */
- private static final long serialVersionUID = 1L;@Resource(name = "lunboBiz") private LunboBiz lunboBiz;
- private Image image;
- private File file; //file 控件名
- private String fileContentType; // 图片类型
- private String fileFileName; // 文件名
- private Integer number;
- public String findImage() {
- image = lunboBiz.findImage();
- return SUCCESS;
- }
- public String alterImage() {
- image = lunboBiz.findImage();
- return SUCCESS;
- }
- public String alterImage1() {
- HttpServletRequest request = ServletActionContext.getRequest();
- String root = request.getRealPath("/upload"); // 图片要上传到的服务器路径
- String names[] = fileFileName.split("\\.");
- String fileName = "";
- if (names.length >= 1) {
- fileName = getRandomString(20) + "." + names[names.length - 1];
- }
- String picPath = "upload/" + fileName; // 图片保存到数据库的路径
- File file1 = new File(root);
- try {
- FileUtils.copyFile(file, new File(file1, fileName));
- }
- } catch(IOException e) {
- e.printStackTrace();
- }
- return SUCCESS;
- }
- /* 获取一条随机字符串 */
- public String getRandomString(int length) { //length 表示生成字符串的长度
- String base = "abcdefghijklmnopqrstuvwxyz0123456789";
- Random random = new Random();
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < length; i++) {
- int number = random.nextInt(base.length());
- sb.append(base.charAt(number));
- }
- return sb.toString();
- }
- }
这是通过复制的方式上传文件, 还有其他方式
方法二
- @Controller("contractAction") public class ContractAction extends ActionSupport {
- private final static String UPLOADDIR = "/files"; // 文件上传的路径, 在 webContent 下建立
- private File file; //input 控件名一定为 file
- // 上传文件名集合
- private String fileFileName;
- // 上传文件内容类型集合
- private String fileContentType;
- private String filename;
- public String upload() throws FileNotFoundException,
- IOException {
- String path = uploadFile(); // 文件保存数据库的路径
- return SUCCESS;
- }
- // 执行上传功能
- @SuppressWarnings("deprecation") public String uploadFile() throws FileNotFoundException,
- IOException {
- try {
- InputStream in =new FileInputStream(file);
- String dir = ServletActionContext.getRequest().getRealPath(UPLOADDIR);
- File fileLocation = new File(dir);
- // 此处也可以在应用根目录手动建立目标上传目录
- if (!fileLocation.exists()) {
- boolean isCreated = fileLocation.mkdir();
- if (!isCreated) {
- // 目标上传目录创建失败, 可做其他处理, 例如抛出自定义异常等, 一般应该不会出现这种情况
- return null;
- }
- }
- // this.setFileFileName(getRandomString(20));
- String[] Name = this.getFileFileName().split("\\.");
- String fileName = getRandomString(20) + "." + Name[Name.length - 1];
- this.setFileFileName(fileName);
- System.out.println(fileName);
- File uploadFile = new File(dir, fileName);
- OutputStream out = new FileOutputStream(uploadFile);
- byte[] buffer = new byte[1024 * 1024];
- int length;
- while ((length = in.read(buffer)) > 0) {
- out.write(buffer, 0, length);
- } in .close();
- out.close();
- return UPLOADDIR.substring(1) + "\\" + fileFileName;
- } catch(FileNotFoundException ex) {
- return null;
- } catch(IOException ex) {
- return null;
- }
- }
- public static String getRandomString(int length) {
- String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
- Random random = new Random();
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < length; i++) {
- int number = random.nextInt(62);
- sb.append(str.charAt(number));
- }
- return sb.toString();
- }
- }
除了单图上传还有多图上传, 原理都是一样的
- package com.cpsec.tang.chemical.action;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.util.List;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.struts2.ServletActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- /**
- * 多文件上传
- */
- public class FilesUploadAction extends ActionSupport {
- // 上传文件存放路径
- private final static String UPLOADDIR = "/upload";
- // 上传文件集合
- private List < File > file;
- // 上传文件名集合
- private List < String > fileFileName;
- // 上传文件内容类型集合
- private List < String > fileContentType;
- public List < File > getFile() {
- return file;
- }
- public void setFile(List < File > file) {
- this.file = file;
- }
- public List < String > getFileFileName() {
- return fileFileName;
- }
- public void setFileFileName(List < String > fileFileName) {
- this.fileFileName = fileFileName;
- }
- public List < String > getFileContentType() {
- return fileContentType;
- }
- public void setFileContentType(List < String > fileContentType) {
- this.fileContentType = fileContentType;
- }
- public String uploadform() throws Exception {
- HttpServletRequest request = ServletActionContext.getRequest();
- String webpath = null; // 上传路径
- for (int i = 0; i < file.size(); i++) {
- // 循环上传每个文件
- uploadFile(i);
- webpath = "upload/" + this.getFileFileName().get(i);
- }
- return "SUCCESS";
- }
- // 执行上传功能
- private String uploadFile(int i) throws FileNotFoundException,
- IOException {
- try {
- InputStream in =new FileInputStream(file.get(i));
- String dir = ServletActionContext.getRequest().getRealPath(UPLOADDIR);
- File fileLocation = new File(dir);
- // 此处也可以在应用根目录手动建立目标上传目录
- if (!fileLocation.exists()) {
- boolean isCreated = fileLocation.mkdir();
- if (!isCreated) {
- // 目标上传目录创建失败, 可做其他处理, 例如抛出自定义异常等, 一般应该不会出现这种情况
- return null;
- }
- }
- String fileName = this.getFileFileName().get(i);
- File uploadFile = new File(dir, fileName);
- OutputStream out = new FileOutputStream(uploadFile);
- byte[] buffer = new byte[1024 * 1024];
- int length;
- while ((length = in.read(buffer)) > 0) {
- out.write(buffer, 0, length);
- } in .close();
- out.close();
- return uploadFile.toString();
- } catch(FileNotFoundException ex) {
- return null;
- } catch(IOException ex) {
- return null;
- }
- }
- }
来源: http://www.phperz.com/article/18/0208/359361.html