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

图片上传和文件上传本质上是一样的,图片本身也是文件。文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作。

注意事项

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索javaweb上传图片
javaweb上传文件
javaweb文件上传 实例、java文件上传实例、java拖拽文件上传实例、java文件上传下载实例、javaweb文件下载实例,以便于您获取更多的相关知识。

时间: 2024-09-14 08:46:15

java web图片上传和文件上传实例_java的相关文章

Java+MySql图片数据保存与读取的具体实例_java

1.创建表: 复制代码 代码如下: drop table if exists photo;CREATE TABLE photo (    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,    name VARCHAR(100) COMMENT '名称',    photo blob COMMENT '照片')ENGINE=InnoDBDEFAULT CHARSET=utf8COLLATE=utf8_general_ci; 图片在MySql中的数据存储格式为

java中struts2实现简单的文件上传与下载_java

一.Struts2文件上传 Struts2的文件上传实现非常简单,只需要简单几步就可完成:注意: (1)文件上传的struts2标签为:<s:file name="" label="上传"/> (2)文件上传的前提是表单属性method="post" enctype="multipart/form-data"; (3)web应用中必须包含common-fileupload.jar和common-io.jar,因为s

web服务部署到linux上后,文件上传路径如何修改呢?

问题描述 web服务部署到linux上后,文件上传路径如何修改呢? 在windows下开发的时候,我的文件上传保存路径为 d:/www/xx/,项目部署到linux上后,应该如何修改上传路径呢?如果不修改,我发现也可以上传,但是文件会上传到tomcat7/bin/目录中,给人感觉非常混乱.我希望能放在指定的文件夹中.谢谢! 解决方案 参考:http://www.enkj.com/help/newscontent/70983 你的路径用 /upload/xxx 就会根据你定义的目录相对路径找到 解

采用AjaxFileUpload实现文件上传,文件上传成功但得到的中文文件名为乱码。

问题描述 采用AjaxFileUpload实现文件上传,文件上传成功但得到的中文文件名为乱码. 采用Jquery插件AjaxFileUpload实现文件上传,文件上传成功但得到的中文文件名为乱码.后端采用ssh框架实现,试了试采用普通表单上传是没有问题的,由此断定问题出在Jquery插件上,可能插件在编码上没有考虑充分,于是研究了下js代码,但还是不知道要改哪里.网上也有人遇到类似问题,但没有人做到明确的回答.上传文件后不想页面整体刷新故采用Ajax实现上传,到底该如何解决呢,希望高手作答? 解

upload-上传头像在本地正常,在linux服务器上总是报“文件上传保存错误

问题描述 上传头像在本地正常,在linux服务器上总是报"文件上传保存错误 public function uploadImage(){ if(!empty($_FILES)){ $upload = $this->upload; $upload->maxSize = 3145728; $upload->exts = array('jpg', 'jpeg', 'gif', 'png'); $upload->rootPath = 'Public/upload/headpic_

数据库-求助:java web项目打包成安装文件,在桌面生成浏览器快捷方式,点击快捷方式访问网址。

问题描述 求助:java web项目打包成安装文件,在桌面生成浏览器快捷方式,点击快捷方式访问网址. 已做好一不联网的人员信息登记程序,不想发布到远程服务器上,想把程序打包成安装包 安装包内包含 数据库(mysql), web服务器(tomcat 6.0), jdk 1.6, 安装完成后自动发布到tomcat,服务设置成自动,每次开机启动服务. 卸载时数据库,tomcat jdk全部卸载,包括服务. 求指点如何做.先谢谢各位了. 注:不是异想天开,现在有一实例就是这样的,所以打算参照这个做一个.

java web项目如何调用.so文件?

问题描述 java web项目如何调用.so文件? 我这里有一个libhf_test.so文件,开始是放在android project里边的,调用什么的都没有问题.现在新加了一个需求:把这个libhf_test.so文件放到web project项目中 然后我就写了个小小的测试类 public class AppUtil{ static{ System.loadLibrary(""hf_test""); } //so文件中的native方法 public nati

在java web开发中,怎样获取上传视频文件时长?

问题描述 Struts2+Spring+Hibernate项目怎样来获得上传视频文件的时长?数据库的字段应该设置成time类型的还是timestamp类型?

java中基于表单的文件上传例子

如果在表单中使用表单元素 <input type="file" />,浏览器在解析表单时,会自动生成一个输入框和一个按钮,输入框可供用户填写本地文件的文件名和路径名,按钮可以让浏览器打开一个文件选择框供用户选择文件: 当表单需要上传文件时,需指定表单 enctype 的值为 multipart/form-data 在 form 元素的语法中,enctype 属性指定将数据发送到服务器时浏览器使用的编码类型. enctype 属性取值: application/x-www-f