strtus2 上传

本文介绍了一个基于Struts2框架的文件上传组件实现细节。该组件通过使用Struts2的MultiPartRequestWrapper来处理文件上传请求,并利用Java IO流将文件从临时位置转移到服务器的指定目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FileUploadAction.java

package com.tya.base.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;

public class FileUploadAction extends BaseAction {
private static final long serialVersionUID = 572146812454l;
private static final int BUFFER_SIZE = 16 * 1024;


@Override
public String execute() {
try {
processRequest(getRequest(),getResponse());
} catch (Exception e) {
e.printStackTrace();
}

return SUCCESS;
}

protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//Struts2 请求 包装过滤器
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;

// 获得上传的文件名
//String fileName = wrapper.getFileNames("imgFile")[0];
String fileName = wrapper.getParameter("Filename");
//获得未见过滤器
File file = wrapper.getFiles("Filedata")[0];
//----------- 重新构建上传文件名----------------------
final Lock lock = new ReentrantLock();
String newName = null;
lock.lock();
try {
//加锁为防止文件名重复
newName = System.currentTimeMillis()
+ fileName.substring(fileName.lastIndexOf("."),
fileName.length());
}finally {
lock.unlock();
}
//------------ 锁结束 -------------
//获取文件输出流
FileOutputStream fos = new FileOutputStream(request.getSession()
.getServletContext().getRealPath("/")
+ "image\\" + newName);
//图片文件地址
String newFileName = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ request.getContextPath() + "/image/" + newName;
byte[] buffer = new byte[BUFFER_SIZE];
//获取内存中当前文件输入流
InputStream in = new FileInputStream(file);
try {
int num = 0;
while ((num = in.read(buffer)) > 0) {
fos.write(buffer, 0, num);
}
out.println(newFileName);
} catch (Exception e) {
e.printStackTrace(System.err);
} finally {
in.close();
fos.close();
out.flush();
out.close();
}
}



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值