1.
<form action="<%=basePath%>priRing.do?method=upload" method="post" enctype="multipart/form-data">
<table>
<tr>
<td><input type="file" name="formfile"/></td>//1
</tr>
<tr>
<td><input type="submit"/></td>
</tr>
</table>
form中
private FormFile formfile;//2
1和2两处的名字必须一样
2.
String name=ff.getFileName();
System.out.println("name="+name);
InputStream is=ff.getInputStream();
FileOutputStream fos=new FileOutputStream(path+"/"+ff.getFileName());//3
3处的路径必须加文件的名字
代码如下:
package com.buybal.mgr.struts.action.pictureAndRing;
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.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.upload.FormFile;
import org.directwebremoting.util.Logger;
import com.buybal.mgr.struts.form.PictureAndRingForm;
import com.jrt.mgr.Global;
import com.jrt.mgr.bean.PictureAndRing;
public class PictureAndRingAction extends DispatchAction {
private static final Logger logger=Logger.getLogger(PictureAndRingAction.class);
public ActionForward pictureUpload(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
PictureAndRingForm fileForm=(PictureAndRingForm)form;
try{
//将文件进行上传
response.setCharacterEncoding("utf-8");
FormFile ff=fileForm.getFile();
if(ff.getFileSize()<0||ff.getFileName().equals("")){
logger.info("上传的文件不存在");
return null;
}
String path="D:\\upload";//路径可以通过配置文件获得
File file=new File(path);
if(!file.exists()){//如果文件不存在则建立该目录
file.mkdirs();
}
InputStream is=ff.getInputStream();
OutputStream bos = new FileOutputStream(path+"\\"+ff.getFileName());//此处的路径是:path+文件名
int bytesRead = 0;
byte buffer[] = new byte[ff.getFileSize()];
while ((bytesRead = is.read(buffer, 0, ff.getFileSize())) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.close();
is.close();
//以下方法是将Zip文件进行解压
int type=fileForm.getType();//上传内容,0图片,1是铃声
int contenttype=fileForm.getContenttype();//上传内容
unzip(path,type,contenttype);
System.out.println("dd");
}catch(Exception e){
e.printStackTrace();
logger.error("上传文件失败,失败原因是:"+e.toString());
}
return null;
}
/*解压文件
* **/
public synchronized void unzip(String path,int type,int contenttype) throws Exception{
File fff=new File(path);
File[] f=fff.listFiles();
for(int i=0;i<f.length;i++){
File fs=f[i];
System.out.println(fs.getName());
if(fs.getName().indexOf(".zip")>-1){
ZipFile zip=new ZipFile(fs);
path=path+"\\"+fs.getName().substring(0, fs.getName().indexOf(".zip"));
Enumeration e = zip.entries();
ZipInputStream iss=new ZipInputStream(new FileInputStream(fs));
while(e.hasMoreElements()){
ZipEntry zipEnt = (ZipEntry) e.nextElement();
if(zipEnt.isDirectory()){
continue;//如果是根目录则跳出
}
String name= (new String(zipEnt.getName().getBytes("ISO-8859-1"),"UTF-8")).trim();
File ff=new File(path);
if(!ff.exists()){
ff.mkdirs();
}
if(name.indexOf("/")>-1){//文件包含子目录时
name=name.substring(name.indexOf("/")+1,name.length());
}
if(name.indexOf("\\")>-1){//包含子目录时
name=name.substring(name.indexOf("\\")+1,name.length());
}
// InputStream iss = zip.getInputStream(zipEnt);
OutputStream os = new FileOutputStream(path+"\\"+name); //循环中不能用BufferedInputStream,会报stream Close错误
int bytesRead = 0;
byte buffer[] = new byte[8192];
while ((bytesRead = iss.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
//将上传的图片存入数据库
String fpath=path+"\\"+name;
List<PictureAndRing> list=Global.parDAO.getPictureAndRing(type, contenttype, fpath);
if(list==null||list.isEmpty())//检查数据库中是否有改图片
Global.parDAO.addPictureAndRing(name,type,contenttype,fpath);
}
iss.close();
}
}
}
}
分享到:
相关推荐
Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。
1. 使用Struts2的拦截器来处理文件上传,可以更好地控制和管理文件上传过程。 2. 为文件上传和下载操作编写单元测试,确保其稳定性和正确性。 3. 保持代码的可读性和可维护性,遵循良好的编程规范。 以上是对...
下面将详细介绍如何使用Struts1实现文件上传和下载,以及涉及到的关键知识点。 **一、文件上传** 1. **表单配置**:在HTML表单中,我们需要使用`<input type="file">`标签让用户选择要上传的文件。同时,表单需要...
- 表单JSP页面:使用Struts2标签库构建表单,包括文件上传字段和提交按钮。 - struts.xml配置文件:定义Action及其对应的Action方法,以及可能的文件上传和下载Result配置。 - 错误处理:可能包括处理文件上传...
#### 四、Struts2文件上传注意事项 1. **表单编码**:确保表单的`enctype`属性正确设置为`multipart/form-data`。 2. **文件大小限制**:服务器端和客户端都可能有文件大小限制,默认情况下Struts2没有对上传文件的...
6. **安全注意事项**:确保对上传的文件进行安全检查,避免恶意用户通过上传文件执行脚本或破坏系统。这可能涉及到验证文件扩展名、检查内容以及存储路径的安全性。 总的来说,Struts1.x的多文件上传功能通过合理的...
综上所述,在使用Struts2框架进行文件上传开发时,不仅需要关注基本的配置步骤,还应当注重细节上的处理,特别是在安全性方面需要格外小心。通过对上述关键点的理解和实践,可以有效提升文件上传功能的健壮性和安全...
SWFUpload 是一款开源的Flash上传组件,...通过上述步骤和注意事项,你可以利用SWFUpload和Struts2构建一个功能强大且安全的多文件上传功能。在实际项目中,根据需求进行适当的定制和优化,以满足用户需求和系统安全。
### 注意事项 - 确保服务器端有足够权限写入上传的文件。 - 限制上传文件的大小和类型,防止恶意文件上传。 - 为了兼容非Flash环境,可以使用Uploadify的HTML5模式,但需要注意浏览器的兼容性问题。 - 上传过程中要...
三、注意事项 - 文件大小限制:Struts2默认设置文件大小限制为2MB,可以通过配置`struts.multipart.maxSize`属性来调整。 - 安全性:确保上传的文件类型安全,避免XSS、CSRF等攻击,可以使用过滤器或者在Action中...
注意事项** - 文件上传时,应限制文件大小和类型,防止DoS攻击和恶意文件上传。 - 保证文件命名的唯一性,避免覆盖已有文件。 - 使用预览功能,让用户确认上传的图片是否正确。 - 定期清理无用的上传文件,节省...
以上就是关于Struts2文件上传的基本流程和注意事项。在实际项目中,你可能会根据需求进行更复杂的功能扩展,比如使用临时目录存储上传文件、异步上传、进度条显示等。在提供的压缩包"struts2fileupdemo"中,可能包含...
1. **依赖引入**:使用Struts2进行文件上传,需要引入`struts2-convention-plugin`和`struts2-file-uploading-plugin`插件。确保`struts.xml`配置文件中包含必要的拦截器栈。 2. **表单设计**:创建一个HTML表单,...
以上就是Struts2框架中实现文件上传的基本步骤和注意事项,无论是单个文件还是多个文件,理解其工作原理和配置细节是实现这一功能的关键。希望这些信息能帮助你在实际开发中顺利地处理文件上传任务。
8. **安全注意事项** 在处理文件上传时,确保对文件名进行安全过滤,避免路径遍历攻击。此外,要限制上传文件的大小和类型,防止恶意文件上传,比如病毒或脚本文件。 通过以上步骤,你可以在Struts2中实现一个简单...
Struts上传 #### 1.1 ActionForm 在Struts中,`ActionForm` 类是用于收集用户输入的数据。对于文件上传,我们需要创建一个继承自 `org.apache.struts.upload.FormFile` 的类,例如 `UploadForm`,在这个类中定义一...
8. **安全注意事项**: - 避免路径遍历攻击,确保上传的文件被保存在预定的目录下,不包含任何动态或用户可控的路径。 - 进行文件类型检查,防止执行恶意代码,如上传`.jsp`或`.php`文件。 - 考虑使用随机文件名...
4. 安全注意事项: - 上传限制:防止大文件上传导致服务器资源耗尽,可以设置最大上传大小。 - 防止路径遍历攻击:验证上传文件的路径,避免用户访问到服务器的敏感文件。 - 文件名处理:对上传文件的原始名字...
通过以上步骤,你可以使用Struts2.0实现文件上传功能。在实际开发中,还可以结合其他技术,如Spring、Hibernate等,以构建更复杂的业务流程。记住,始终要关注安全性,以确保应用的稳定性和用户的数据安全。
5. **注意事项**: - 文件上传时要考虑安全性,比如限制文件大小和类型,防止恶意用户上传大文件或危险文件。 - 上传的文件应保存在一个安全的目录下,避免暴露敏感信息或被直接访问。 - 处理文件时,要确保正确...