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;
       }
     }
   }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Java实现图片上传到服务器并把上传的图片读取出来

    在很多的网站都可以实现上传头像,可以选择自己喜欢的图片做头像,从本地上传,下次登录时可以直接显示出已经上传的头像,那么这个是如何实现的呢? 下面说一下我的实现过程(只是个人实现思路,实际网站怎么实现的不太清楚) 实现的思路: 工具:MySQL,eclipse 首先,在MySQL中创建了两个表,一个t_user表,用来存放用户名,密码等个人信息, 一个t_touxiang表,用来存放上传的图片在服务器中的存放路径,以及图片名字和用户ID, T_touxiang表中的用户ID对应了t_user中的i

  • Java通过jersey实现客户端图片上传示例

    在上一篇笔记 <SpringMVC实现图片上传>记录了将图片上传到本地的实现,在很多项目中都会有一台专门的文件服务器来保存文件的,这边记录下客户端通过jersey上传图片到文件服务端的实现. 由于要在不同主机上上传文件,所以不能直接通过流的方式来写,需要通过webService来完成,jersey是基于Java的一个轻量级RESTful风格的Web Services框架,它让客户端文件上传变得更简单. 1. maven依赖 spring的一些包以及fileupload和io包这边就不贴出来了.

  • java使用CKEditor实现图片上传功能

    java如何使用CKEditor实现图片上传功能,具体内容如下 1.根据实际需要下载指定的CKEditor 2.删除文件ckeditor/plugins/image/dialogs/image.js预览框中文本内容,并修改hidden属性值为显示上传选项卡 删除image.js中包含在双引号中的上述文本 将image.js中的hidden属性值改为0 3.修改ckeditor/config.js文件,配置"上传到服务器"按钮调用的controller接口 4."上传到服务器&

  • Java以struts2为例介绍如何实现图片上传

    总的说图片上传有两种方式,一种是把图片文件写到数据库中,另一种是存到服务器文件目录中.写到数据库中的图片文件需要转换成二进制流的格式,占用数据库空间比较,适合少量图片的存储,比如说,系统中某些小图标,写到数据库中的优点是比较安全,不容易被用户不小心删除. 在struts2中实现(以图片上传为例) 1.FileUpload.jsp代码清单如下: <%@ page language="java" import="java.util.*" pageEncoding=

  • Java图片上传实现代码

    本文实例为大家分享了Java图片上传代码,供大家参考,具体内容如下 import java.io.*; import java.net.*; /* *发送端 */ class picsend { public static void main(String[] args) throws Exception { if(args.length!=1) { System.out.println("请选择一张.jpg图片"); return; } File file = new File(ar

  • java通过模拟post方式提交表单实现图片上传功能实例

    本文实例讲述了java通过模拟post方式提交表单实现图片上传功能.分享给大家供大家参考,具体如下: 模拟表单html如下: <form action="up_result.jsp" method="post" enctype="multipart/form-data" name="form1" id="form1"> <label> <input type="tex

  • Java+mysql本地图片上传数据库及下载示例

    做一个将本地图片上传到mysql数据库的小实例,顺便也下载下来到桌面检测是否上传成功. 在写代码之前得先在数据库中建立image表,用来存储图片. create table image (id int primary key auto_increment , name varchar(30) COMMENT '名称', content mediumblob COMMENT '图片'); 下面直接上代码: package jdbc_imagetest; import java.io.*; impo

  • JavaWeb实现裁剪图片上传完整代码

    本文实例为大家分享了JavaWeb实现裁剪图片上传完整案例,供大家参考,具体内容如下 实现思路 •使用jcrop插件手机要裁剪图片的坐标  •将收集到的参数传递到后台,在后台使用java图形对象绘制图像进行裁剪 ◦后台处理流程: 1.将上传的图片按按照比例进行压缩后上传到文件服务器,并且将压缩后的图片保存在本地临时目录中. 2.将压缩后的图片回显到页面,使用jcrop进行裁剪,手机裁剪坐标(x,y,width,height) ■@paramx 目标切片起点坐标X ■@param y 目标切片起点

  • java web图片上传和文件上传实例

    图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作. 注意事项 1.form表单一定要写属性enctype="multipart/form-data" 2.为了能保证文件能上传成功file控件的name属性值要和你提交的控制层变量名一致, 例如空间名是file那么你要在后台这样定义 private File file; //file控件名 private String fileContentType;//图

  • Java Struts图片上传至指定文件夹并显示图片功能

    继上一次利用Servlet实现图片上传,这次利用基于MVC的Struts框架,封装了Servlet并简化了JSP页面跳转. JSP上传页面 上传一定要为form加上enctype="multipart/form-data",表示提交的数据时二进制的 并且必须是method="post" <%@ page language="java" contentType="text/html; charset=utf-8" page

  • Java实现的简单图片上传功能示例

    本文实例讲述了Java实现的简单图片上传功能.分享给大家供大家参考,具体如下: import java.io.*; import java.net.*; /* *发送端 */ class picsend { public static void main(String[] args) throws Exception { if(args.length!=1) { System.out.println("请选择一张.jpg图片"); return; } File file = new F

  • 微信 java 实现js-sdk 图片上传下载完整流程

    最近做的一个项目刚好用到微信js-sdk的图片上传接口,在这里做一下总结. 在这里能知道使用js api的基本配置 https://mp.weixin.qq.com/wiki t=resource/res_main&id=mp1421141115&token=&lang=zh_CN 我这里没有用checkJsApi去判断当前客户端版本是否支持指定JS接口,好.通过看开发文档,我们知道调用js接口直接都要通过config接口注入权限验证配置 <code class="

随机推荐