- 浏览: 121274 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
xiaoane:
这还需要重启计算机?为什么呀?哪个配置项和重启有关系?谢谢
远程连接MySQL的方法 -
tidelgl:
<script type="text/java ...
JSON与XML比较 -
zkp1990:
谢谢了1!!!
MyEclipse 6.5 下载安装
1.struts-xml配置文件的设置:
<constant name="struts.multipart.maxSize" value="15097152"/><!-- 文件上传中整个请求内容允许的最大字节数为15M -->
<!-- 提供文件上传功能 -->
<interceptor-ref name="fileUpload"/>
<!-- 附件 Action -->
<action name="attachmentsAction" class="*.*.action.AttachmentsAction">
<!--这里这个设置是必须的。不要调用文件拦截器。。后面在ACTION就可以知道此处的重要性--!>
<interceptor-ref name="fileUploadStack"/>
<result type="json"></result>
</action>
2.ext页面attachment.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<title>附件管理</title>
<link href="/ext/resources/css/ext-all.css" rel="stylesheet" type="text/css" />
<script language="JavaScript" type="text/javascript" src="/ext/ext-base.js"></script>
<script language="JavaScript" type="text/javascript" src="/ext/ext-all.js"></script>
<script language="JavaScript" type="text/javascript" src="/ext/ext-lang-zh_CN.js"></script>
<script language="JavaScript" type="text/javascript">
var center;
var addFrom;
Ext.onReady(function(){
addForm = new Ext.FormPanel({
id: 'addForm',
fileUpload:true,
frame:true,
labelWidth: 60,
bodyStyle: 'padding:5px 5px 0',
labelAlign:'left',
items:[{
border: false,
layout:'column',
collapsible: true,
items: [{
columnWidth : 0.98,
border: false,
layout : 'form',
defaultType : 'textfield',
items : [
{fieldLabel:'文件1', xtype:'textfield', inputType:'file', name: 'upload', cls:'nobordertext', anchor:'98%',allowBlank: true},
{fieldLabel: '摘要1', maxLength:'255', name: 'description', maxLengthText:'供方负责人的字数不能超过50', anchor:'98%'}
,{fieldLabel:'文件2', xtype:'textfield', inputType:'file', name: 'upload', cls:'nobordertext', anchor:'98%'},
{fieldLabel: '摘要2', maxLength:'255', name: 'description', maxLengthText:'供方负责人的字数不能超过50', anchor:'98%'},
{fieldLabel:'文件3', xtype:'textfield', inputType:'file', name: 'upload', cls:'nobordertext', anchor:'98%'},
{fieldLabel: '摘要3', maxLength:'255', name: 'description', maxLengthText:'供方负责人的字数不能超过50', anchor:'98%'}
]
}
]
}
],
buttons: [
{text: '确定',handler: saveForm},
{text: '关闭',handler: function(){
addForm.getForm().reset();
window.close();
}
}
]
});
center = new Ext.Panel({
id: 'center',
region:'center',
border: false,
autoScroll: true,
enableTabScroll:true,
items: [addForm]
});
var panel = new Ext.Panel({
id: 'panel',
layout:'fit',
border: false,
items: [center]
});
var viewport = new Ext.Viewport({
id: 'viewport',
layout: 'fit',
autoScroll: true,
items:[panel]
});
});
function saveForm(){
var _url ="/*/*/attachmentsAction!saveAttachmentsInfo.html";
addForm.getForm().submit({
url: _url,
method: 'post',
//params:{fkId: addForm.findById("fkId").getValue()},
//提交成功的回调函数
success:function(form,action){
if (action.result.msg=='success') {
addForm.getForm().reset();
window.close();
} else if (action.result.msg=='notFile') {
Ext.Msg.alert('提示','上传的文件不存在!请重试!');
} else if(action.result.msg=='SizeLimitExceededException') {
Ext.Msg.alert('提示','您上传的文件太大!文件不能超过15M');
}
},
failure:function(form,action){
Ext.MessageBox.hide();
Ext.MessageBox.alert('Error',action.result.msg);
Ext.Msg.alert('错误','服务器出现错误请稍后再试!');
}
});
}
</script>
</head>
<body>
</body>
</html>
3.java处理页面AttachmentsAction.java
{
//这里对应的是EXT页面定义的file控件的NAME名称。。这个是struts2提供给我们的属性
//您可以修改成其他的名称,,只要upload ,uploadFileName,uploadContentType 保持一致即可
private List<File> upload = new ArrayList<File> ();
private List<String> uploadFileName = new ArrayList<String> ();
private List<String> uploadContentType = new ArrayList<String> ();
private List<String> description = new ArrayList<String> ();
final static int MAX_SIZE = 15 * 1024 * 1024; // 设置上传文件最大为 15M
final static String dir = "/Attachments/";
。。省略掉set。get方法
/**
* 保存多个Attachments对象。
* 这里介绍的是把文件保存到服务器的文件夹中。。并不是保存在数据库里.
* author by xj
* @return
* @throws Exception
*/
public String saveAttachmentsInfo() throws Exception {
//取的系统当前时间
Calendar cal1 = new GregorianCalendar();
SimpleDateFormat theDate = new SimpleDateFormat("yyyy-MM-dd");
String strDate = theDate.format(cal1.getTime());
String year = "2000";
String month = "12";
if (strDate.length() > 9) {
year = strDate.substring(0,4);
month = strDate.substring(5,7);
}
//得到文件的相对路径
String uploadDir = dir + year + "/" + month + "/";
//获得文件的绝对路径
String realUploadDir = ServletActionContext.getServletContext().getRealPath(uploadDir);
// the directory to upload to用于存放上传文件的目录
File dirPath = new File(realUploadDir);
if (!dirPath.exists()) {
dirPath.mkdirs();
}
String name = "";
String address = "";
String measurements = "";
String descriptionName = "";
String link = "";
String msg = "{success:true, msg:'failure'}";
if (upload.size() > 0){
for(int i=0; i < upload.size();i++){
Boolean isFile = upload.get(i).exists();
if (isFile){
//保存附件数据库信息
//取得原始文件名
name = uploadFileName.get(i);
//取得文件的后缀名
String suffix = "";
if (name != null && (!name.equals(""))){
attachments.setName(name);
if (name != null && (!name.equals(""))) {
suffix = name.substring(name.lastIndexOf("."), name.length());
}
}
//对数据库操作... 这里我们需要的是记录的ID作为保存文件的名字
attachments = new Attachments();
String aId = attachmentsManager.createAttachmentsInfo(attachments);
String fileUrl = realUploadDir + "/" + aId + suffix;
this.copy(upload.get(i), new File(fileUrl));
link = link + "文件名为" + name + " 上传成功!/n";
msg = "{success:true, msg:'success', link:'" + link + "'}";
}else{
link = "上传的文件不存在";
msg = "{success:true, msg:'notFile', link:'" + link + "'}";
}
}
} else {
link = "文件太大";
msg = "{success:true, msg:'SizeLimitExceededException', link:'" + link + "'}";
}
HttpServletResponse response = ServletActionContext.getResponse();
response.reset();
response.setContentType("text/html;charset=UTF-8");
out = response.getWriter();
out.print(msg);
return NONE;
}
private void copy(File src, File dst) throws Exception{
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(src);
out = new FileOutputStream(dst);
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = in.read(buffer, 0, 8192)) != -1) {
out.write(buffer, 0, bytesRead);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 从服务器上下载文件
* @return
* @throws Exception
*/
public String downLoadFileInfo() throws Exception{
logger.info("=============AttachmentsAction downLoadFileInfo=============");
HttpServletRequest req = ServletActionContext.getRequest();
this.setSuccess(true);
HttpServletResponse response = ServletActionContext.getResponse();
response.reset();
String id = req.getParameter("id");
if (id != null && (!id.equals(""))) {
Attachments attachments = attachmentsManager.getAttachmentsInfoById(id);
//获得文件的绝对路径的前缀
String path = ServletActionContext.getServletContext().getRealPath(attachments.getAddress());
//取得文件的后缀名
String suffix = "";
if (attachments.getName() != null && (!attachments.getName().equals("")))
suffix = attachments.getName().substring(attachments.getName().lastIndexOf("."), attachments.getName().length());
//获得文件在服务器中的名字
String systemFileName = id + suffix;
//获得文件的在服务器上的绝对路径
String realPath = path + "\\" + systemFileName;
//当文件名是中文时
//String downFileName = new String(attachments.getName().getBytes("ISO8859-1"), "UTF-8");//这里我不需要做这次转换
String downFileName = attachments.getName();
//设置响应头和下载保存的文件名
response.setContentType("application/msdownload;charset=UTF-8");
//这里就是解决中文名称文件下载的关键地方
response.setHeader("Content-Disposition","attachment; filename=\"" + java.net.URLEncoder.encode(downFileName, "UTF-8"));
//打开文件的输出流
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
this.downLoadFileFromSystem(realPath, bufferedOutputStream);
}
return NONE;
}
/**
* 从服务器上下载文件
* @param realPath
* @param bufferedOutputStream
* @throws Exception
*/
private void downLoadFileFromSystem(String realPath, BufferedOutputStream bufferedOutputStream) throws Exception{
try {
//打开指定文件的流信息
FileInputStream fileInputStream = new FileInputStream(realPath);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = fileInputStream.read(buffer, 0, 8192)) != -1) {
bufferedOutputStream.write(buffer,0,bytesRead);
}
fileInputStream.close();
bufferedOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.这里所用到的commons-fileupload-1.1.1.jar。不能使用commons-fileupload-1.0.jar文件。。因为我们需要的是文件拦截器需要用到的是org.apache.commons.fileupload.servlet.servletfileupload. 1.0的jar不支持。。
同时建议两个架包不要同时使用。
发表评论
-
用Java实现断点续传(HTTP)
2010-07-28 11:07 2905断点续传的原理 其实断点续传的原理很简单,就是在Htt ... -
linux下 java JNI调用C语言动态链接库
2010-06-23 14:21 1509转自:http://watershitter.it ... -
java Native Method初涉
2010-06-23 11:49 780转自:http://www.iteye.com/topic/7 ... -
java中native解释
2010-06-23 11:47 1342引用:http://topic.csdn.net/t/2005 ... -
java 乱码处理大集合
2010-03-12 09:58 976由于jdk中只规定了必须有一些unicode utf8 等编 ...
相关推荐
NULL 博文链接:https://wuyecheng.iteye.com/blog/611124
用EXT3.0+Struts2.0框架写的树控件的代码示例,放在web工程下面直接可以跑了
采用了struts2.0,spring2.2,ibatis,quartz,extjs3.0 实现了关于短信的调度框架,对接收人维护,动态添加每日短信数据,编写短信模版,最后通过quartz定时发送,因为短信接口收费所以不提供,需要jar包自己下载,...
这个就算是2.0版本吧,和上次发的系统相比: 这次将列表改成异步传输 并且修改了系统中的表单和按钮,使界面更加美观 修改了部分模块的JS错误 去掉了一些模块只保留最基本的功能 文件有2个,因为大小超过了20M 分卷1 2分...
研究gwt+ext+ssh框架整合编写的一个实例,实例中包括一个说明文档(google plugin创建gwt实例说明、gwt-ext实例的创建、gwt-ext与struts2整合实例说明);还包括文档对应的myeclipse项目。相关的包稍微有点大,没有...
本框架选用的技术struts2.0.11,hibernate3.2.5ga,spring-framework-2.5,oracle92,少量采用ext-2.0脚本技术,IDE-myeclipse601 部署时,可修改web-inf/config/spring/applicationContext.xml文件,修改相应的数据库信息...
所以没有上传导入的jar,其实就是默认的struts2和hibernate以及spring的包.该项目使用的jar包为以下. spring-beans.jar xwork-2.0.4.jar spring-context.jar ognl-2.6.11.jar spring-web.jar ...
模拟登录界面,加入验证码,xml树的实现 Ext viewport框架 等好多东西,都是自己在学习ext中想到什么就做个例子,只是有点乱,...在javascript目录下加入Ext2.0 在lib下加入所需要的jar 数据库是mysql 详见sql文件夹
主要开发的工具有MyEclipse 6.0 ,数据库为Mysql,应用服务器为tomcat5.X,对EXT的使用参考了官方网站上的EXT2.0版本。该平台的实现过程中,涉及的工作包括:(1)页面设计,总体设计的讨论; (2)网站公告的管理;(3)...
然而大部分都是基于 Ext 1 开发, 而 2.0 的呢, 大多又找不到源码下载, 而且其类库比较复杂, 所以今天做它是花了一番功夫,不过当最后的结果出来后, 一切辛苦都显的那么值得了, 学技术,归根到底就是一种学习和总结的...
本章我们将会开发基于Struts2框架的Hello World.我们的Hello World程序是你开发基于Struts2框架程序的第一步.这里我们会提供循序渐进的教程来开发基于Struts2框架的Hello World程序. 教程包含基本的步骤像创建目录...
该框架提供了完整的Web应用解决方案,UI使用当前流行的ExtJS2.0,表现层框架为Struts2,事务管理由Spring2.0处理,持久层使用Ibatis2.3。该框架已经基于上述技术,提供了如页面框架、身份验证、用户管理和权限管理等...
· struts2-2.2.1-all.zip · struts-2.1.8.1-all.zip · hibernate-distribution-3.6.0.Final-dist.zip · hibernate-distribution-3.5.1-Final-dist.zip · hibernate-release-4.2.4.Final.zip spring-...
图书管理系统后台(B/S架构) 实现语言java 主要有 ssh框架技术 (struts2.0) JPA 后台页面ExtJs2.0 实现 数据库 sql2005
代码百分之百可以运行,是经过严格测试过了的,而且框架也是最新的,所以才要...里面附带文档和数据库执行文件,遇到问题可以咨询我,采用技术是:Struts2.0 、Spring 2.5 、Hibernate3 、Ext js 3.3,欢迎大家来下载。