• 使用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绑定的数据字段将保存原值不变!

     

  • 相关阅读:
    AcWing 递归实现指数型枚举 dfs
    蓝桥杯 不同单词个数统计 map
    蓝桥杯 士兵排队问题 拓扑排序
    蓝桥杯 数字黑洞 模拟
    蓝桥杯 身份证排序 排序
    蓝桥杯 质因数2 分解质因数
    ubuntu开发机初始化
    axios封装
    vue组件
    django配置跨域并开发测试接口
  • 原文地址:https://www.cnblogs.com/xuzy630/p/XWAF_6.html
Copyright © 2020-2023  润新知