使用XWAF框架(2)——上传文件
XWAF提供了上传文件的HttpFileUploader工具类,具备强大的多文件上传、文件类型过滤、文件大小限制、存储目录设置、文件名称更改等功能,简化了Web应用开发的编程工作。
它能同时解析表单参数和文件域,不仅能够将文件保存到服务器上,还能同时提取表单参数的值。
如果要在保存上传文件之前提取参数值,就需要先调用“parseRequest()”方法,并使用该方法返回的对象替换request变量,然后再使用getParameter(name) 方法提取参数值。
参考代码如下:
private ServletConfig config = null;
public void init(ServletConfig config) throws ServletException {
this.config = config;
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
......
HttpFileUploader hfu = new HttpFileUploader(config, request);
request = hfu.parseRequest();
request.getParameter(“name”);
......
hfu.saveFilesAndParameters(true);
}
2.1 上传文件类型过滤
调用上传文件处理器的setFileFilter()方法,参考代码如下:
hfu.setFileFilter(“*.jpg|*.png|*.gif”);
2.2 限制上传文件的大小
调用上传文件处理器的setOneFileSize()方法限制单个文件的大小(单位:M),调用setTotalFileSize()方法限制多个文件的总大小。参考代码如下:
hfu.setOneFileSize(4); // 单个文件不能大于4兆。
hfu.setTotalFileSize(50); // 总文件大小不能大于50兆。
2.3 设置文件存储目录
调用上传文件处理器的setStoredFilesFold(“总目录名称”)方法设置存储上传文件的总目录,处理器会自动在总目录下面创建三个子目录:Musics、Photos、Videos分别用于存放音频文件、图片文件和视频文件。
如果程序员没有设置总目录,处理器会在网站根目录创建如下默认的目录结构:Uploads、Uploads/Musics、Uploads/Photos、Uploads/Videos等,用于存放上传文件。
参考代码:
hfu.setStoredFilesFold(“MyUploads”);
2.4 设置上传文件的名称
上传文件处理器默认是采用原文件名,根据文件的类型分别存放到对应的子目录。但是,程序员可以使用setFileNameSetType()方法,选择多种方式给文件命名,这些方式以如下枚举值来表示:
hfu.setFileNameSetType(FileNameSetType.UseOldName);
说明:使用原文件名称。
hfu.setFileNameSetType(FileNameSetType.UseTimes);
说明:使用时间戳命名。
hfu.setFileNameSetType(FileNameSetType.UsePrefix);
说明:在原文件名称前使用前缀字符。
hfu.setFileNameSetType(FileNameSetType.UsePrefixTimes);
说明:使用前缀和时间戳命名上传文件。
hfu.setFileNameSetType(FileNameSetType.UseOldNameTimes);
说明:在原文件名称后添加时间戳。
hfu.setFileNameSetType(FileNameSetType.UsePrefixOldNameTimes);
说明:在原文件名称前面加前缀,在后面加时间戳。
hfu.setFileNameSetType(FileNameSetType.UseCustom);
说明:使用自定义的文件名!
如果选择了与前缀相关的命名方式,就必须设置前缀属性值才有效。参考代码如下:
hfu.setFileNamePrefix("upf_"); // 设置默认前缀!
hfu.setImageFilePrefix("img_"); // 图片文件前缀,若不设置就使用默认前缀!
hfu.setVideoFilePrefix("vid_"); // 视频文件前缀,若不设置就使用默认前缀!
hfu.setMusicFilePrefix("msc_"); // 音频文件前缀,若不设置就使用默认前缀!
如果设置为用户自定义文件名称,就要同时在页面文件中提供用户编辑文件名称的文本域标记,并在HttpHandler文件中提取对应的文本域参数值,再调用上传文件处理器的setCustomFileName()方法,参考代码如下:
String strPVal = request.getParameter("MyPhotoCustom");
hfu.setCustomFileName("MyPhoto", strPVal);
如果程序员没有调用setCustomFileName()方法设置自定义文件名,处理器将自动使用原文件名称。
2.5 获取上传文件在服务器的路径和名称
调用保存上传文件的方法之后,程序员可以使用如下语句:
Map<String, String> savedFilePaths = hfu.getUploadFilePaths();
获取全部上传文件的服务器存储路径和文件名称集合(Map),该Map的key值是文件域的name属性值,value值是存储到服务器上的相对路径和文件名。程序员还可以调用方法:
String strFilePath = hfu.getUploadFilePath(“MyPhoto”);
获取指定文件域的上传文件在服务器的存储路径和名称。
2.6 设置统一的上传文件限制条件
用户可以在使用XWAG生成代码之后,设置或修改XwafConfig.xml配置文件中与文件上传相关的各个参数项,节点如下所示:
<!-- 设置文件上传的限制条件 -->
<uploadFile>
<storedFold>/Uploads</storedFold>
<oneFileSize>4</oneFileSize>
<totalFileSize>100</totalFileSize>
<coverOldFile>true</coverOldFile>
<fileFilter>*.*</fileFilter>
</uploadFile>
2.7 文件上传与数据库更新
在实际项目开发中,开发人员往往使用数据字段记录一个资源文件的路径,文件本身独立存放在一个子目录中。如果编辑包含这种资源文件路径的数据记录,可能就需要使用“file”文件域上传新文件,并同时将上传到服务器的文件路径和名称保存到数据字段中。XWAF框架可以帮助服务器代码实现这样的功能。
由于用户对编辑页面中“file”文件域的操作,可能没有选择任何要上传文件,服务器该如何处理呢?
XWAF框架约定如下:
1)如果用户当前操作是新增记录,则与file标记绑定的数据字段将被赋予null值;
2)如果是更新记录,则服务器将忽略该file参数,服务器端代码也无法访问没有上传文件的file元素,与file绑定的数据字段将保存原值不变!
使用XWAF框架(2)——上传文件的更多相关文章
- AFNetworking框架_上传文件或图像server
的文本 XXXXXXXXXX在自己的论点更填写 - (void)uploadImageWithImage:(NSString *)imagePath { //上传其它所需參数 NSString *us ...
- [原]Asp.net Core 2.1.2 测试成功Ajax上传文件新解法
利用layui框架可以上传文件调试拦截成功! [HttpPost] public IActionResult Method1(IFormFile file) { return Json(new{suc ...
- 找呀志_通过开源框架引AsyncHttpClient上传文件
一个.步骤: 1.加入权限(接入网络和可写) 2.获取上传文件的路径和推断是空的 3.如果为空.创建一个异步请求对象 4.创建上传文件路径 5.跑post请求(指定url路径.封装上传參数.新建Asy ...
- SSM框架中如何简便上传文件表单
此种方式上传文件相对简单,以下均经测试成功,才提供到此. 以下为单个文件上传方式 分析:本次的工作目的是根据一级标题产生对应的二级标题,在每个二级标题下对应一个(file字段)新闻文件,当点击新闻文件 ...
- Struts2框架下的文件上传文件类型、名称约定
Struts2框架下的文件上传机制:1.通过multipart/form-data form提交文件到服务器2.文件名是通过什么地方设置的?在strust2的FileUploadInterceptor ...
- android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件
AsyncHttpClient开源框架android-async-http还是非常方便的. AsyncHttpClient该类通经常使用在android应用程序中创建异步GET, POST, PUT和 ...
- Django框架 之 Form表单和Ajax上传文件
Django框架 之 Form表单和Ajax上传文件 浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html 1 2 3 4 5 6 7 <h3& ...
- Android 利用an框架快速实现网络请求(含下载上传文件)
作者:Bgwan链接:https://zhuanlan.zhihu.com/p/22573081来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. an框架的网络框架是完全 ...
- ci框架读取上传的excel文件数据
原文链接: https://blog.csdn.net/qq_38148394/article/details/87921373 此功能实现使用到PHPExcel类库,PHPExcel是一个PHP类库 ...
随机推荐
- 解决ubuntu使用命令sudo apt -get install 安装东西时出现"E: Sub-process /usr/bin/dpkg returned an error code (1) "的错误
问题描述: 今天在使用命令 "sudo apt-get install python3-pip"安装时,总是出现如下图这样的错误,开始以为是以为自己python版本的问题,后来发现 ...
- GDAL线面互转换(2)
在上一个文章中介绍了线转化为面和面转化为线,其主要的实现思路就是把面中的点取出来构成线,把线中的点取出来构成面,实际上就是一个硬拷贝,无奈客户的实际需求并非如此,客户想要线转面的时候几条相交线构成面, ...
- 如何从本地添加项目到Github?(Windows)
有两种方法可以上传项目到Github 一.github在线上传文件夹 在线上传也可以上传完整的文件夹结构,直接拖拽到上传文件页面的框中即可. 点击上传文件 直接拖拽即可上传文件夹及文件夹里面的文件.如 ...
- 网络 IP地址、网段、子网掩码
IP地址范围,最小:00000000,00000000,00000000,00000000:最大:11111111,11111111,11111111,11111111 即:最小:0.0.0.0 最大 ...
- Fuckey V1.0 Beta版发布!!!
Fuckey,以前叫FullNexus4,只因为当时想做一个软件给自己的Nexus 4,方便方便一下,不过这名字感觉太局限了,毕竟很多朋友不是使用的Nexus 4的手机,但却还是使用了FullNexu ...
- [翻译] ZFDragableModalTransition
ZFDragableModalTransition Usage - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender ...
- 基于NSString处理文件的高级类
基于NSString处理文件的高级类 我已经把处理文件的类简化到了变态的程度,如果你还有更简洁的方法,请告知我,谢谢! 使用详情: 源码: // // NSString+File.h // Maste ...
- Linux系统锁定关键文件
锁定系统关键文件 1.密码.账号文件 chattr +i /etc/passwd /etc/group /etc/shadow /etc/gshadow /etc/inittab 加锁:chattr ...
- ubuntu 12.04配置mac的Lion主题的风格
1.下载mac壁纸 http://drive.noobslab.com/data/wallpapers/Mac-os-x-Wallpapers%28NoobsLab.com%29.zip 根据自己喜好 ...
- JavaScript设计模式—单例模式
单例模式介绍 系统中被唯一使用的,一个类只有一个实例 单例模式的思路是: 一个类能返回一个对象的引用(并且永远是同一个)和一个获得该实例的方法(静态方法,通常使用 getInstance 名称). 那 ...