java web图片上传和文件上传

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

注意事项

1.form表单一定要写属性enctype="multipart/form-data"

2.为了能保证文件能上传成功file控件的name属性值要和你提交的控制层变量名一致,

例如空间名是file那么你要在后台这样定义

private File file; //file控件名

private String fileContentType;//图片类型

private String fileFileName; //文件名

1.jsp页面

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 < 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,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

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;

//上传文件名集合

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 < 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,length);

}

in.close();

out.close();

return uploadFile.toString();

} catch (FileNotFoundException ex) {

return null;

} catch (IOException ex) {

return null;

}

}

}

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

相关文章

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

java web文件上传详解_java web图片上传和文件上传实例详解相关推荐

  1. 基于Python的DICOM文件转换教程,使用pydicom将图片存为DICOM文件。

    基于Python的DICOM文件转换教程,使用pydicom将图片存为DICOM文件. DICOM是医学图像和信息的数字化标准,可用于将医学影像数据.诊断报告等信息在医疗领域进行传输.分享和分析.而常 ...

  2. dxf文件解析,g代码解析,图片解析C#工程文件

    dxf文件解析,g代码解析,图片解析C#工程文件 1.解析完成的图形坐标自动保存,通过通信接口直接下发即可 2.可用于激光切割机,打印机,打码机,巡边机,点胶机等运动控制系统 ID:693000659 ...

  3. dxf文件解析,g代码解析,图片解析C#工程文件 可用于激光切割机,打印机,打码机,巡边机,点胶机等运动控制系统

    dxf文件解析,g代码解析,图片解析C#工程文件 1.解析完成的图形坐标自动保存,通过通信接口直接下发即可 2.可用于激光切割机,打印机,打码机,巡边机,点胶机等运动控制系统 ID:483000659 ...

  4. java web编码详解_java web 开发 编码问题详解

    java web 开发 编码问题详解 浏览器 IE/FireFox ------------->Servlet容器-------------------------->显示页面 编码   ...

  5. java 跨域上传_java后台图片跨域上传图片 文件

    发送方 @ResponseBody @RequestMapping(value="/imgUpLoadNewOneKuaYu")public String imgUpLoadNew ...

  6. java dispatcher详解_Java Web开发详解:RequestDispatcher接口

    12.6.1  RequestDispatcher接口 RequestDispatcher 对象由 Servlet 容器创建,用于封装一个由路径所标识的服务器资源.利用RequestDispatche ...

  7. java富文本传图片_使用富文本编辑器上传图片实例详解

    富文本编辑器上传图片 一.导入kindeditor的js 二.将kindeditor与一个文本域textarea进行关联,即用textarea初始化一个kindeditor对象 itemaddedit ...

  8. java编译遇到的问题与解决_java web开发中遇到的问题及解决方案(个人学习日志,持续更新)...

    2012.05.02   星期三 1.问题:导入的新工程,名字上出现感叹号. 原因:工程的jar包libraries需要重新加载. 解决:工程右键-->properties-->Java ...

  9. python编程入门与案例详解课后题答案-Python入门之三角函数sin()函数实例详解

    描述 sin()返回的x弧度的正弦值. 语法 以下是sin()方法的语法: importmath math.sin(x) 注意:sin()是不能直接访问的,需要导入math模块,然后通过math静态对 ...

最新文章

  1. [AaronYang]C#人爱学不学8[事件和.net4.5的弱事件深入浅出]
  2. Windows下使用gvim格式化xml文件
  3. Jmeter之线程组详解
  4. 算法分析 运动员循环赛_「98跑」大众跑者的训练比专业运动员更累!
  5. cacti及其相关插件的安装
  6. 前端学习(1335):mongoDB导入数据
  7. flask 框架第一天学习笔记
  8. hadoop fs命令
  9. 人大金仓数据库sql语句_数据库SQL语句大全——最常用的SQL语句
  10. 在Sharepoint Designer 2007 中加入定制的工作流动作
  11. Netty工作笔记0042---Netty入门--编写客户端
  12. android 键盘遮盖输入框_Android软键盘遮住输入框的解决方法终极适配
  13. 利用vbs读取XML中的某个指定子叶节点 (转)
  14. 多元时间序列因果关系分析
  15. 使用 Vue 和 epub.js 制作电子书阅读器
  16. matlab绘制动图
  17. 弹窗的点击空白关闭,背景虚化,防止滚动穿透
  18. python求图形面积_如何使用python语言中的if语句实现求取图形面积
  19. whm面板降mysql_在cPanel&WHM 78版上可以取消阻止MySQL 5.5
  20. Nacos服务---主流配置中心对比

热门文章

  1. 解释器实例之算数计算(四)
  2. python学习链接
  3. Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程分析
  4. Exchange 2010 SP2 新功能
  5. AIR切换SDK版本时遇到的问题
  6. Visual Studio 2010 Beta 2 公开下载地址
  7. ocs 2007 r2 服务体验
  8. 8.6 edu25 ,577#div2 CF补题(二分 ,dp 与 贪心
  9. Akka源码分析-Akka Typed
  10. HDU 4911 http://acm.hdu.edu.cn/showproblem.php?pid=4911(线段树求逆序对)