- 浏览: 234147 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (125)
- JAVA基础 (18)
- Spring (7)
- Hibernate (4)
- Struts (4)
- Dwr (1)
- Sql (2)
- 框架集合 (4)
- js (4)
- 异常 (1)
- 劳动法 (0)
- Apatch Ftp站点 (2)
- 我的问题 (0)
- Oracle (13)
- JBOSS (11)
- Ejb (3)
- gwt-ext (1)
- 病毒 (1)
- 网络常识 (1)
- IBATIS (2)
- SVN (1)
- RED5 (3)
- Eclipse (9)
- gost (0)
- 魔兽争霸 (1)
- php (7)
- php学习 (5)
- 杂项 (3)
- 电脑小知识 (1)
- 数据库安装问题 (2)
- Jquery (5)
- 下载地址收集 (1)
- 浏览器 (1)
- php函数使用 (1)
- 开发工具 (0)
- C# (1)
- 数据库 (2)
最新评论
-
sjxinrui:
WTF。。。。
Javax.naming.NameNotFoundException -
whaosoft:
org.springframework.samples.pet ...
在基于Spring及Hibernate应用程序中使用ETags降低带宽占用和服务器压力 -
whaosoft:
我晕 大哥 我找l Spring的所有版本都没看到
143 ...
在基于Spring及Hibernate应用程序中使用ETags降低带宽占用和服务器压力 -
freedomstyle:
还是JavaEye里面来的全面啊
PHP中的PDO函数库(PDO Functions) -
yanghaiskys:
养成良好的编码规范,兄弟没上班吧,呵呵
dwr helloword
最近要做上传下载,所以又把它翻出了,熟悉了一把,做了一下字节转换的调整及上传类型的限制,当然还有上传路径的限制。不过一直在考虑的问题是怎样找到减少服务器压力的具体方法,本列子贴出来是希望能给某些新手一些帮助,同时也希望各路大侠批评指点小弟的许多不足。
首先建立一个FileAction
package com.action;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import com.actionForm.FileActionForm;
import org.apache.struts.actions.DispatchAction;
import java.util.Date;
import java.text.*;
import org.apache.struts.upload.FormFile;
import java.io.*;
import java.net.URLEncoder;
import com.dao.*;
public class FileAction extends DispatchAction {
private JDBConnection connection =new JDBConnection();
//以下方法实现文件的上传
public ActionForward upLoadFile(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws
Exception {
ActionForward forward=null;
Date date = new Date();
FileActionForm fileActionForm = (FileActionForm) form;
//FormFile用于指定存取文件的类型
FormFile file = fileActionForm.getFile(); //获取当前的文件
// 获得系统的绝对路径 String dir = servlet.getServletContext().getRealPath("/image");
//我上传的文件没有放在服务器上。而是存在D:D:\\loadfile\\temp\\
String dir="D:\\loadfile\\temp\\";
int i = 0;
String type = file.getFileName();
while(i!=-1){
//找到上传文件的类型的位置,这个地方的是'.'
i = type.indexOf(".");
/* System.out.println(i);*/
/*截取上传文件的后缀名,此时得到了文件的类型*/
type = type.substring(i+1);
}
// 限制上传类型为jpg,txt,rar;
if (!type.equals("jpg") && !type.equals("txt")&& !type.equals("bmp"))
{//当上传的类型不为上述类型时,跳转到错误页面。
forward=mapping.findForward("error");
}
else
{
// 将上传时间加入文件名(这个地方的是毫秒数)
String times = String.valueOf(date.getTime());
//组合成 time.type
String fname = times + "." + type;
//InInputStream是用以从特定的资源读取字节的方法。
InputStream streamIn = file.getInputStream(); //创建读取用户上传文件的对象
//得到是字节数,即byte,我们可以直接用file.getFileSize(),也可以在创建读取对象时用streamIn.available();
// int ok=streamIn.available();
int ok=file.getFileSize();
String strFee = null;
//这个地方是处理上传的为M单位计算时,下一个是以kb,在下一个是byte;
if(ok>=1024*1024)
{
float ok1=(((float)ok)/1024f/1024f);
DecimalFormat myformat1 = new DecimalFormat("0.00");
strFee = myformat1.format(ok1)+"M";
System.out.println(strFee+"M");
}
else if(ok>1024 && ok<=1024*1024)
{
double ok2=((double)ok)/1024;
DecimalFormat myformat2=new DecimalFormat("0.00");
strFee = myformat2.format(ok2)+"kb";
System.out.println(strFee+"kb");
}
else if(ok<1024)
{
System.out.println("aaaaaaaaa");
strFee=String.valueOf(ok)+"byte";
System.out.println(strFee);
}
System.out.println( streamIn.available()+"文件大小byte");
//这个是io包下的上传文件类
File uploadFile = new File(dir); //指定上传文件的位置
if (!uploadFile.exists() || uploadFile == null) { //判断指定路径dir是否存在,不存在则创建路径
uploadFile.mkdirs();
}
//上传的路径+文件名
String path = uploadFile.getPath() + "\\" + fname;
//OutputStream用于向某个目标写入字节的抽象类,这个地方写入目标是path,通过输出流FileOutputStream去写
OutputStream streamOut = new FileOutputStream(path);
int bytesRead = 0;
byte[] buffer = new byte[8192];
//将数据读入byte数组的一部分,其中读入字节数的最大值是8192,读入的字节将存储到,buffer[0]到buffer[0+8190-1]的部分中
//streamIn.read方法返回的是实际读取字节数目.如果读到末尾则返回-1.如果bytesRead返回为0则表示没有读取任何字节。
while ((bytesRead = streamIn.read(buffer, 0, 8192)) != -1) {
//写入buffer数组的一部分,从buf[0]开始写入并写入bytesRead个字节,这个write方法将发生阻塞直至字节写入完成。
streamOut.write(buffer, 0, bytesRead);
}
// 关闭输出输入流,销毁File流。
streamOut.close();
streamIn.close();
file.destroy();
String paths=path;
System.out.println(paths);
String fileName = Chinese.toChinese(fileActionForm.getFileName()); //获取文件的名称
//String fileSize = String.valueOf(file.getFileSize());
String fileDate = DateFormat.getDateInstance().format(date);
String sql = "insert into tb_file values('" + fileName + "','" +
strFee + "','" + fileDate + "','" + paths + "')";
connection.executeUpdate(sql);
connection.closeConnection();
forward=mapping.findForward("upLoadFileResult");
}
return forward;
}
//实现文件的下载
public ActionForward downFile(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws
Exception {
String path = request.getParameter("path");
System.out.println(path+"111");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream fos = null;
InputStream fis = null;
//如果是从服务器上取就用这个获得系统的绝对路径方法。 String filepath = servlet.getServletContext().getRealPath("/" + path);
String filepath=path;
System.out.println("文件路径"+filepath);
File uploadFile = new File(filepath);
fis = new FileInputStream(uploadFile);
bis = new BufferedInputStream(fis);
fos = response.getOutputStream();
bos = new BufferedOutputStream(fos);
//这个就就是弹出下载对话框的关键代码
response.setHeader("Content-disposition",
"attachment;filename=" +
URLEncoder.encode(path, "utf-8"));
int bytesRead = 0;
//这个地方的同上传的一样。我就不多说了,都是用输入流进行先读,然后用输出流去写,唯一不同的是我用的是缓冲输入输出流
byte[] buffer = new byte[8192];
while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.flush();
fis.close();
bis.close();
fos.close();
bos.close();
return null;
}
}
FileActionForm
package com.actionForm;
import org.apache.struts.action.*;
import org.apache.struts.upload.*;
public class FileActionForm extends ActionForm {
private String fileName;//上传文件的名称
private String fileSize;//上传文件的大小
private String filePath;//上传文件到服务器的路径
private String fileDate;//上传文件的日期
private FormFile file;//上传文件
public String getFileName() {
return fileName;
}
public FormFile getFile() {
return file;
}
public String getFileSize() {
return fileSize;
}
public String getFilePath() {
return filePath;
}
public String getFileDate() {
return fileDate;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public void setFile(FormFile file) {
this.file = file;
}
public void setFileSize(String fileSize) {
this.fileSize = fileSize;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public void setFileDate(String fileDate) {
this.fileDate = fileDate;
}
}
index.jsp 此位置的form是javabeen的对象,这个javabeen中存取的图片的相关信息
<table width="264" height="81" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="115" rowspan="4" align="center"><img src="<%=form.getFilePath()%>" width="100" height="100"></td>
<td width="133" align="center">图片名称:<%=form.getFileName()%></td>
</tr>
<tr align="center">
<td>图片大小:<%=form.getFileSize()%></td>
</tr>
<tr align="center">
<td>上传日期:<%=form.getFileDate()%></td>
</tr>
<tr>
<td align="center"><a href="fileAction.do?method=downFile&path=<%=form.getFilePath()%>" ><img src="priture/bottond.jpg"></a>
</td>
</tr>
</table>
<html:form action="fileAction.do?method=upLoadFile" enctype="multipart/form-data" onsubmit="return Mycheck()">
<table height="52" border="0" align="center" cellpadding="0" cellspacing="0">
<tr align="center">
<td width="60" height="26">图片名称:</td>
<td width="160"> <html:text property="fileName"/> </td>
<td width="60">图片路径:</td>
<td width="198"> <html:file property="file"/> </td>
</tr>
<tr align="right">
<td height="26" colspan="4"> <html:submit>上传</html:submit> </td>
</tr>
</table>
</html:form>
struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="fileActionForm" type="com.actionForm.FileActionForm" />
</form-beans>
<action-mappings>
<action name="fileActionForm" parameter="method" path="/fileAction" scope="request" type="com.action.FileAction" validate="true">
<forward name="upLoadFileResult" path="/result.jsp"/>
<forward name="error" path="/fail.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" />
</struts-config>
http://www.bitscn.com/java/spring/200605/23081.html ssh长传与下载
评论
好!讲的清澈
下载直接读的服务器上的文件吗? 下载的是哪个文件呢,好像没看到传文件名给下载的部分啊。
如果上传到服务器上是
// 获得系统的绝对路径 String dir = servlet.getServletContext().getRealPath("/image");
//这个是io包下的上传文件类
File uploadFile = new File(dir); //指定上传文件的位置
if (!uploadFile.exists() || uploadFile == null) { //判断指定路径dir是否存在,不存在则创建路径
uploadFile.mkdirs();
}
下载直接读的服务器上的文件吗? 下载的是哪个文件呢,好像没看到传文件名给下载的部分啊。
下载的在这个地方,我用的是一个图片
<a href="fileAction.do?method=downFile&path=<%=form.getFilePath()%>" ><img src="priture/bottond.jpg"></a>
// 获得系统的绝对路径 String dir = servlet.getServletContext().getRealPath("/image");
//我上传的文件没有放在服务器上。而是存在D:D:\\loadfile\\temp\\
String dir="D:\\loadfile\\temp\\";
你仔细看
看见你做得非常好,想做一下,但是我用的是ssh三层架构,怎么样才能把和数据库有关的内容加入到hibernate中呢?你觉得可以实现吗?谢谢
完全可以,这个与hibernate无关,你会做ssh,就会做这个,和平时做的没什么两样
<td align="center"><a href="fileAction.do?method=downFile&path=<%=form.getFilePath()%>" ><img src="priture/bottond.jpg"></a>
注意下,我这个地方的path是从数据库里获得的,即我上传的时候,保存的图片路径
<html:form action="fileAction.do?method=upLoadFile" enctype="multipart/form-data" onsubmit="return Mycheck()">
<table height="52" border="0" align="center" cellpadding="0" cellspacing="0">
<tr align="center">
<td width="60" height="26">图片名称:</td>
<td width="160"> <html:text property="fileName"/> </td>
<td width="60">图片路径:</td>
<td width="198"> <html:file property="file"/> </td>
</tr>
<tr align="right">
<td height="26" colspan="4"> <html:submit>上传</html:submit> </td>
</tr>
</table>
</html:form>
如果上传到服务器上是
// 获得系统的绝对路径 String dir = servlet.getServletContext().getRealPath("/image");
//这个是io包下的上传文件类
File uploadFile = new File(dir); //指定上传文件的位置
if (!uploadFile.exists() || uploadFile == null) { //判断指定路径dir是否存在,不存在则创建路径
uploadFile.mkdirs();
}
相关推荐
Struts上传 #### 1.1 ActionForm 在Struts中,`ActionForm` 类是用于收集用户输入的数据。对于文件上传,我们需要创建一个继承自 `org.apache.struts.upload.FormFile` 的类,例如 `UploadForm`,在这个类中定义一...
以下是对Struts上传下载源代码的详细解释: 1. **struts-config.xml配置**: 在Struts配置文件`struts-config.xml`中,可以看到针对上传、下载、列表和删除操作的四个`<action>`元素。这些元素定义了不同操作的...
在这个"Struts上传下载实例"中,我们将会探讨如何在Struts框架下实现文件的上传和下载功能,这对于开发涉及用户交互和数据交换的Web应用来说至关重要。 首先,让我们了解上传功能。在Struts中,文件上传主要依赖于`...
这个"struts上传下载例子"展示了如何在Struts中实现文件上传和下载的功能,这对于任何处理用户数据交互的Web应用都是必不可少的。下面我们将深入探讨相关知识点。 首先,我们来理解MVC模式。在MVC架构中,模型...
在本"struts上传下载完整dome"中,我们将深入探讨如何在Struts框架下实现文件的上传与下载功能。 一、Struts2文件上传 1. **依赖库**:Struts2的文件上传功能依赖于`commons-fileupload`和`commons-io`两个库。你...
总结起来,使用Struts实现文件上传下载涉及前端表单设计、后端处理逻辑、文件存储策略以及安全控制等多个方面。在实践中,我们还需要考虑到性能优化和用户体验提升,例如使用异步上传、进度条展示等技术。
提供的压缩文件`struts实现上传下载源码及文档`应该包含了完整的实现示例,包括Action类、ActionForm、JSP页面以及使用说明。通过阅读源码和文档,你可以更深入地理解如何在实际项目中应用这些技术。 总之,解决...
在Struts中,文件上传和下载是常见的功能需求,尤其在构建动态网站或Web应用时。 文件上传是指用户通过网页界面将本地文件发送到服务器的过程。在Struts中,这通常涉及到以下关键知识点: 1. **ActionForm**:...
接着是`struts1和struts2分别实现文件上传下载.rar`,这个文件涵盖了Struts 1和Struts 2两个版本的实现。Struts 1与Struts 2在处理文件上传的方式上有一些不同。在Struts 1中,文件上传通常通过`FileUploadAction`或...
这个"struts2_上传下载"实例则涵盖了多种实现这些功能的方法。 首先,Struts2的文件上传依赖于Apache的Commons FileUpload库。在配置Struts2的Action类时,需要引入相应的依赖,并在Action类中定义一个类型的字段来...
在Struts2进行文件上传下载时,可能需要以下jar包: - `struts2-core.jar`:Struts2的核心库,包含Action、Result等核心组件。 - `xwork-core.jar`:XWork框架的库,Struts2是基于XWork构建的。 - `struts2-...
Struts框架是Java Web开发中常用的一个开源MVC框架,由Apache软件基金会维护...以上是对Struts框架中文件上传下载功能的详细解析,希望对你理解这一主题有所帮助。如需进一步讨论,可以加入指定的QQ群或通过邮件联系。
下面将详细讲解Struts实现文件上传下载的原理和步骤。 ### 文件上传 1. **依赖库**:首先,需要引入Apache的Commons FileUpload和Commons IO库。这两个库提供了处理文件上传的功能。 2. **配置struts.xml**:在...
在这个"用struts和jdbc做的一个上传下载系统"中,我们可以看到Struts框架被用来处理用户请求,实现上传和下载功能,而JDBC(Java Database Connectivity)则用于与数据库进行交互,存储和检索文件信息。 首先,...
在Struts框架中,实现文件上传和下载功能是常见的需求,尤其在处理用户交互、数据交换等方面。 一、文件上传 1. **原理**:文件上传主要涉及到HTTP协议中的multipart/form-data编码类型。在HTML表单中,通过设置`...
1.直接import到MyEclipse直接运行。 2.包含上传一个文件和多个文件 3.struts上传 用到包commons-fileupload-1.2.1.jar commons-io-1.4.jar(项目中已经有) 4.附带图片
在Struts框架中,处理文件上传和下载是常见的功能需求。下面,我们将详细讨论Struts中实现文件上传和下载的关键知识点。 一、文件上传 1. **配置Struts2核心过滤器**:在web.xml中,我们需要配置`FilterDispatcher...
在Struts框架中,文件的上传和下载是常见的功能需求,用于实现用户交互,如上传图片、文档等,或者提供资源的下载服务。下面将详细探讨Struts中文件上传和下载的实现机制。 一、文件上传 1. 配置文件:在Struts2中...