`
mamacmm
  • 浏览: 197376 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

使用Nutz的文件池和上传功能实现上传图片

    博客分类:
  • J2EE
阅读更多

【阅读本文前提】

 

 

您了解Nutz框架(刚刚接触Nutz,对此还不熟悉),想要使用Nutz的文件池和上传功能;

想实现一个上传文件或者图片的功能。

 

 

【正文】

 

1.怎么在项目中使用Nutz框架,这里就不说了,具体可查看:

 

http://code.google.com/p/nutz/wiki/nutz_preface?tm=6

 

2.前台

上传图片(我这里是实现的上传图片的功能)的前台页面代码:

<form name="addphotoForm" action="addPhoto.action" method="post" onsubmit="return validateForm(this)" enctype="multipart/form-data">
<input type="hidden" name="albumId" value="${obj}">
<table class="default" width="100%">
<tr class="title">
	<td colspan="2">填写相片信息</td>
</tr>
<tr>
	<td class="item"><@m.mustMark/>相片名称</td>
	<td><input type="text" name="photoName" emptyInfo="请输入相片名称。" size="50" maxLen="50" lengthInfo="相片名称最大长度不能超过50字符。"></td>
</tr>
<tr>
	<td class="item">相片描述</td>
	<td><textarea name="description"  size="50" maxLen="300" lengthInfo="相片描述最大长度不能超过300字符。" rows="5" cols="51"></textarea></td>
</tr>
<tr>
	<td class="item"><@m.mustMark/>上传相片</td>
	<td ><input type="file" name="photoFile" size="50" emptyInfo="请选择要上传的资源文件!"></td>
</tr>
<tr>
	<td></td>
	<td>
	<input type="submit" name="submit" value="确定" class="btn">
	<input type="reset" name="reset" value="重置" class="btn">
	</td>
</tr>
</table>
</form>

 

注意:

上传页面的表单,action="addPhoto.action",这里的 addPhoto.action 的后缀是什么无所谓(原因查看Nutz框架的文档),addPhoto 是上传图片的入口函数。

enctype="multipart/form-data" ,这个必须要写的,不解释。

 

3.配置文件

 

为了实现上传图片的功能,我使用了Nutz自带的上传适配器:UploadAdaptor,使用了ioc的方式(怎么配置ioc,这里就不说了),具体配置文件如下:

ioc文件夹下,添加一个名称为 myUpload.js 的文件(名称无所谓,随便起),里面的内容如下:

 

var myUploadIoc = {
	utils : {     
		type : 'com.mm.util.MyUtils',     
		fields : {         
			sc : {app:'$servlet'}   // 将 ServletContext 对象注入 MyUtils
		}
	},
	tmpFilePool : {     
		type : 'org.nutz.filepool.NutFilePool',     // 临时文件最大个数为 1000 个     
		args : [ {java:'$utils.getPath("/tmp")'}, 1000 ]    
	},
	uploadPicFileContext : { 
		type : 'org.nutz.mvc.upload.UploadingContext',     
		singleton : false,     
		args : [ { refer : 'tmpFilePool' } ],
		fields : {
			// 是否忽略空文件, 默认为 false         
			ignoreNull : true, 
			// 单个文件最大尺寸(大约的值,单位为字节,即 1048576 为 1M)         
			maxFileSize : 1048576,         // 正则表达式匹配可以支持的文件名         
			nameFilter : '^(.+[.])(gif|jpg|png)$'
		}
	},
	myPicUpload : {     
		type : 'org.nutz.mvc.upload.UploadAdaptor',     
		singleton : false,     
		args : [ { refer : 'uploadPicFileContext' } ]  
	}
};

 

注意:

 

com.mm.util.MyUtils 是自己定义的一个工具类,为了得到上传地址,内容如下:

 

package com.mm.util;

import javax.servlet.ServletContext;

/**
 * 用于上传ioc : myUpload.js 
 *
 */
public class MyUtils {
	private ServletContext sc;      
	public String getPath(String path) {         
		return sc.getRealPath(path);     
	} 
}

 

tmpFilePool 是Nutz的文件池;

java:'$utils.getPath("/tmp")'  这个是指明了上传的图片的地址是:项目根目录下的tmp目录下;

gif|jpg|png  限制了上传文件的格式。

 

4.后台代码

 

其实就是上传模块的入口函数代码:

 

/**
 * 添加照片
* @param albumId 相册ID
* @param req 
*/
@At("/photo/pho/addPhoto")
@Ok("fm:/common/execute_result.ftl")
@AdaptBy(type = UploadAdaptor.class, args = { "ioc:myPicUpload" })
public void addPhoto(@Param("..")NutMap nm,HttpServletRequest req){
	//log.info("NutMap:"+nm);
	TempFile tf = (TempFile)nm.get("photoFile");
	File f = tf.getFile();
	//FieldMeta meta = tf.getMeta();
	//String oldName = meta.getFileLocalName();
	//log.info("文件绝对路径:"+f.getAbsolutePath()+",原来的名称:"+oldName);
		
	String str = f.getPath();
	int one = str.indexOf(Constants.UPLOAD_FILE_DIRECTORY_NAME);
	str = str.substring(one);
	//log.info("文件的相对路径:"+str);

	long albumId = (long)nm.getInt("albumId");
	String photoName = (String)nm.get("photoName");
	String description = (String)nm.get("description");
	Photo photo = new Photo();
	photo.setAlbumId(albumId);
	photo.setPhotoName(photoName);
	photo.setDescription(description);
	photo.setCreateDate(TimeUtil.getNowTime("yyyy-MM-dd"));
//	photo.setPhotoUrl(f.getAbsolutePath());
	photo.setPhotoUrl(str);
	getServiceManager().getPhotoService().insert(photo);
		
	setExecuteResult(null);
	addMessage("添加照片成功!");
	addRedirURL("返回", "@back");
	addRedirURL("照片列表", "photoList.html?albumId="+String.valueOf(albumId));
	req.setAttribute(EXECUTE_RESULT, getExecuteResult());
}

 

注意:

上传表单的内容全部用 NutMap 来接收了;

@AdaptBy(type = UploadAdaptor.class, args = { "ioc:myPicUpload" }) ,这句是关键配置,注意myPicUpload要和ioc里面的相对应;

注意使用相对路径,否则会出现意想不到的问题(就是在使用本地路径访问项目的时候,上传的照片可以显示,使用实际路径访问项目的时候就不能显示上传的照片了)。

 Constants.UPLOAD_FILE_DIRECTORY_NAME  ,这个是一个字符串 tmp ,这个一定要和ioc里面配置的路径一致,原因不解释。

 

 

解释到这里,我想大家应该明白了吧(有什么写的不好的地方,欢迎指教)。

分享到:
评论

相关推荐

    nutz 文件上传例子

    NULL 博文链接:https://yunhaifeiwu.iteye.com/blog/763832

    nutz-1.b.52.zip

    Mvc -- 注解风格的配置,内置多文件上传功能 Json -- 解析和渲染 Castors -- Java 对象类型转换 Lang -- 更简洁的 Java 函数以及更丰富的反射支持 Aop -- 轻便快速的切面编程支持 Plugin -- 轻便的插件机制 Resource...

    nutz使用手册

    * Mvc -- 注解风格的配置,内置多文件上传功能 * Json -- 解析和渲染 * Castors -- Java 对象类型转换 * Lang -- 更简洁的 Java 函数以及更丰富的反射支持 * Aop -- 轻便快速的切面编程支持 * Plugin -- 轻便的插件...

    nutz初使用之MVC HelloWorld (netbeans html,jquery版)

    NULL 博文链接:https://yunhaifeiwu.iteye.com/blog/743368

    JAVA上百实例源码以及开源项目

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目源代码

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

    java开源包3

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包4

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包5

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包8

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包1

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包11

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包2

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包6

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包10

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包7

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包9

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包101

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    Java资源包01

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

Global site tag (gtag.js) - Google Analytics