热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

javaweb图片上传和文件上传实例

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

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

注意事项

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"%> 
 
 
 
 
 
 
 







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 

这是通过复制的方式上传文件,还有其他方式

方法二

@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

除了单图上传还有多图上传,原理都是一样的

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;  
     //上传文件名集合  
     private List fileFileName;  
     //上传文件内容类型集合  
     private List fileContentType;  
     
     public List getFile() {  
       return file;  
     }  
 
     public void setFile(List file) {  
       this.file = file;  
     }  
 
    public List getFileFileName() {  
      return fileFileName;  
    }  
 
     public void setFileFileName(List fileFileName) {  
       this.fileFileName = fileFileName;  
     }  
 
     public List getFileContentType() {  
       return fileContentType;  
     }  
 
     public void setFileContentType(List fileContentType) {  
       this.fileCOntentType= fileContentType;  
     }  
 
     
     public String uploadform() throws Exception {
       HttpServletRequest request = ServletActionContext.getRequest();
       String webpath=null;//上传路径
       for (int i = 0; i  0) {  
           out.write(buffer, 0, length);  
         }
         in.close();  
         out.close();  
         return uploadFile.toString();
       } catch (FileNotFoundException ex) {
         return null;  
       } catch (IOException ex) {
         return null;  
       }  
     }
   }

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


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了求解gcdexgcd斐蜀定理的迭代法和递归法,并解释了exgcd的概念和应用。exgcd是指对于不完全为0的非负整数a和b,gcd(a,b)表示a和b的最大公约数,必然存在整数对x和y,使得gcd(a,b)=ax+by。此外,本文还给出了相应的代码示例。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 电销机器人作为一种人工智能技术载体,可以帮助企业提升电销效率并节省人工成本。然而,电销机器人市场缺乏统一的市场准入标准,产品品质良莠不齐。创业者在代理或购买电销机器人时应注意谨防用录音冒充真人语音通话以及宣传技术与实际效果不符的情况。选择电销机器人时需要考察公司资质和产品品质,尤其要关注语音识别率。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
author-avatar
韩晓亮2602918655
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有