用struts实现单个文件上传并改变上传图片的大小

页面:

<script type="text/javascript" src="<%=path %>/crm/js/jquery-1.8.0.js"></script>

var isIE = /msie/i.test(navigator.userAgent) && !window.opera;

function check(e){

var filepath=$("input[id='file']").val(); 

var extStart=filepath.lastIndexOf("."); 

var ext=filepath.substring(extStart,filepath.length).toUpperCase(); 

if(filepath==""){

alert("请选择需要上传的图片");

return false;

}else{

if(ext!=".BMP"&&ext!=".PNG"&&ext!=".GIF"&&ext!=".JPG"&&ext!=".JPEG"){ 

alert("图片限于bmp,png,gif,jpeg,jpg格式"); 

return false

}

return true;

}

}

<form action="demo" method="post" enctype="multipart/form-data">

  <input type="file" name="myfile" id="file" />

  <input type="submit" value="上传" onclick="return check()" />

  </form>

Struts.xml:

<constant name="struts.multipart.maxSize" value="999999999"/>

<action name="demo" class="control.FileUploadAction" method="fileupload">

<param name="savePath">/upload</param>

<result name="success">/images.jsp</result>

<result name="input">/index.jsp</result>

</action>

FileUploadAction.java:

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport {

private static final int BUFFER_SIZE =800* 1024;//一次性可读最大字节

private File myfile;//上传文件域对象

private String myfileContentType;//文件类型 

private String myfileFileName;//上传文件名

private String savePath;//保存路径

public String fileupload() {

SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式

//以当前时间重新命名

String filename=df.format(new Date())+getExtention(this.getMyfileFileName());

//目标文件路径

String dstPath=ServletActionContext.getServletContext().getRealPath(this.getSavePath())+"\\"+filename;

File dstFile=new File(dstPath);

//读入

if (this.upload.length() > 2097152) {

setMessage("上传图片不能超过2M!");

setCustomerid(getCustomerid());

return lmzupload();

else {

//改变上传图片的大小

Image image=ImageIO.read(this.upload);//构造Image对象

/*int width=image.getWidth(null);//得到源图宽

int height=image.getHeight(null);//得到源图高*/

BufferedImage bufferedImage=new BufferedImage(500,500,BufferedImage.TYPE_INT_RGB);

//绘制缩小后的图片

bufferedImage.getGraphics().drawImage(image,0,0,500,500,null);

//临时图片

File tempfile=new File(ServletActionContext.getServletContext()

.getRealPath("crm")

"\\"

"customer"

"\\"+"temp.jpg");

FileOutputStream fos=new FileOutputStream(tempfile);

JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(fos);

encoder.encode(bufferedImage);//近JEEG编码

fos.close();

copy(this.myfile,dstFile);

}

setMyfileFileName(filename);

return SUCCESS;

}

//复制

private static void copy(File src, File dst) {

try {

InputStream in = null;

OutputStream out = null;

try {

in = new BufferedInputStream(new FileInputStream(src),

BUFFER_SIZE);//输入流

out = new BufferedOutputStream(new FileOutputStream(dst),

BUFFER_SIZE);//输出流

byte[] buffer = new byte[BUFFER_SIZE];

//一次性读最大字节并写入

while (in.read(buffer) > 0) {

out.write(buffer);

}

}finally {

if (null != in) {

in.close();//关闭输入流

}

if (null != out) {

out.close();//关闭输出流

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

//截取后缀名

private static String getExtention(String fileName) {

int pos = fileName.lastIndexOf(".");

return fileName.substring(pos);

}

}

转载于:https://my.oschina.net/u/1253389/blog/160214

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值