文档章节

用 Hasor 实现文件上传

哈库纳
 哈库纳
发布于 2016/10/06 13:14
字数 622
阅读 167
收藏 0
点赞 1
评论 0

    Hasor 采用了与 JFinal 类似的方式提供 API,底层的上传机制是来自 apache commons fileupload 并将其进行大量简化后内置到 Hasor 自身。

    因此在 Hasor 中使用文件上传功能无需引入任何第三方 jar 包您就可以使用该功能,先从一个简单的例子说起。

@MappingTo("/fileupload.do")
public class FileupLoad extends WebController {
    public void execute() throws IOException {
        FileItem multipart = this.getOneMultipart("upfile");
        multipart.writeTo(...);
        multipart.deleteOrSkip();
    }
}

    而对应的 html 页面就是一个普通的 文件表单上传。

<form action="/fileupload.do" method="post" enctype="multipart/form-data">
    <input type="file" name="upfile"/>
    <input type="submit" value="上传"/>
</form>

    大一点的文件,在上传时服务器需要一个临时存储。使用 Hasor 上传文件你可以在解析上传时指定临时存储目录,也可以使用 Hasor 环境变量中指定的默认上传地址。默认情况下 Hasor 使用默认位置进行缓存上传数据。

缓存目录

    下面是两种上传方式,第一种是用了 Hasor 默认自带的缓存目录配置。而第二种方式是用户自定义上传的缓存目录和配置信息。

@MappingTo("/fileupload.do")
public class FileupLoad extends WebController {
    public void execute() throws IOException {
        //
        // 方式1: - 使用默认缓存目录
        FileItem multipart = this.getOneMultipart("upfile");
        multipart.writeTo(new File(""));
        multipart.deleteOrSkip();
        //
        // 方式2: - 使用自定义缓存目录
        String cacheDirectory = "...";
        Integer maxPostSize = 1024 * 1024;
        FileItem multipart1 = this.getOneMultipart("upfile", cacheDirectory, maxPostSize);
    }
}

    而在接下来将会介绍一下 Hasor 默认的上传缓存配置。

    临时上传缓存的配置信息保存在:“hasor.fileupload.cacheDirectory”配置项下。这个配置位于 hasor jar 包中的“static-config.xml”配置文件中。具体内容如下:

...
<hasor>
    ...
    <!-- 文件上传 -->
    <fileupload>
        <!-- 上传文件缓存目录 -->
        <cacheDirectory>${HASOR_TEMP_PATH}/fragment</cacheDirectory>
        <!-- 允许的请求大小 ( -1 表示不限制)-->
        <maxRequestSize>-1</maxRequestSize>
        <!-- 允许上传的单个文件大小( -1 表示不限制) -->
        <maxFileSize>-1</maxFileSize>
    </fileupload>
    ...
</hasor>
...

    在这段配置文件中 “HASOR_TEMP_PATH” 表示的是一个环境变量,在 static-config.xml 配置文件的 “environmentVar” 节点下可以找到这个环境变量的内容。

<environmentVar>
    ...
    <!-- 工作目录 -->
    <WORK_HOME>%USER.HOME%/hasor-work</WORK_HOME>
    <!-- 临时文件位置 -->
    <HASOR_TEMP_PATH>%WORK_HOME%/temp</HASOR_TEMP_PATH>
    ...
</environmentVar>

    默认情况下 “HASOR_TEMP_PATH” 的配置信息是 “%WORK_HOME%/temp”,我们看到这又是一组环境变量。“WORK_HOME” 默认情况下表示的是 “USER.HOME”。而这是用户登录系统之后的用户主目录。

    如果您是 linux 系统那么这个目录通常在这里:“/home/xxx”,如果是 window 用户用户住目录会在“c:/users”下面。

© 著作权归作者所有

共有 人打赏支持
哈库纳

哈库纳

粉丝 953
博文 81
码字总数 149803
作品 4
杭州
后端工程师
Hasor 2.4.4 发布,宽泛的Servlet版本,以及内置文件上传

===== Hasor-Core v2.4.4 (2016-09-05) 新增: 改进: 亮点一: 新增文件上传支持,使用 Hasor 的文件上传不需要引入任何 Jars。Hasor 将大名鼎鼎的 apache fileupload 框架进行了大量优化之后集...

哈库纳 ⋅ 2016/09/05 ⋅ 0

使用 Hasor 实现 模版化配置文件

Hasor 不光小巧还很精良,这一片文章我们来讲一讲 “模版化配置文件”。 首先在了解模版化配置文件之前先看一下我们的实际开发中的问题。现在假设你有一个小团队,大家分别开发同一个项目的不...

哈库纳 ⋅ 2016/10/06 ⋅ 0

Hasor 2.4.4 发布,宽泛的Servlet版本内置文件上传

===== Hasor-Core v2.4.4 (2016-09-05)* 新增: 01.宽泛的Servlet版本支持 servlet 2.3 到 servlet 3.1。 02.新增支持文件上传功能支持。 03.新增 @Async 注解,用于标记 request 请求是否以 ...

哈库纳 ⋅ 2016/09/05 ⋅ 2

Hasor-Core v0.0.1 发布

Hasor-Core v0.0.1.Release 01.)Hasor-Core:80%以上代码重构,重构主要涉及内容的是结构性重构。重构之后更便于扩展核心层功能。 1.InitContext接口功能合并到Environment接口中。 2.ApiBin...

哈库纳 ⋅ 2013/09/18 ⋅ 0

Hasor:在简化开发上的设计

首先引用Wiki的介绍一下Hasor: “Hasor是一款开源框架。它是为了解决企业模块化开发中复杂性而创建的。Hasor遵循简单的依赖、单一职责,在开发多模块企业项目中更加有调理。然而Hasor的用途...

哈库纳 ⋅ 2013/07/13 ⋅ 0

Hasor 的 Xml 配置文件解析详解

我觉得 Xml 作为配置文件最大的好处是结构化,对程序配置信息可以有结构有组织的进行描述。但是使用 Xml 作为配置文件带给我们的问题是我们需要程序自己去解析Xml配置文件结构。这显得有点多...

哈库纳 ⋅ 2013/12/31 ⋅ 4

Hasor 同 Spring OSGi 的比较及设计思想

这篇是承接《轻量级 Java 开发框架 设计》系列Blog文的后续文章,本文将通过设计思想,实现方式上对比 Hasor Spring OSGi 三者。 在开启本文之前我想用最简短的一段话介绍一下 Hasor 。 Haso...

哈库纳 ⋅ 2013/12/27 ⋅ 27

Hasor Group/hasor

Hasor    面向生产环境而设计的 Java 应用开发框架。它的核心设计目标是提供一个简单、且必要的环境给开发者。开发者可以在此基础上快速进行软件开发。    区别于其它框架的是 Hasor 有着...

Hasor Group ⋅ 2013/12/10 ⋅ 0

汇总 Hasor 已经开发完的功能

首先引用Wiki的介绍一下Hasor: “Hasor是一款开源框架。它是为了解决企业模块化开发中复杂性而创建的。Hasor遵循简单的依赖、单一职责,在开发多模块企业项目中更加有调理。然而Hasor的用途...

哈库纳 ⋅ 2013/07/29 ⋅ 6

Hasor 插件集及其使用 Demo

这篇是承接《轻量级 Java 开发框架 设计》系列Blog文的后续文章,本文将介绍 Hasor 内部主要插件并附带插件的功能描述和简单使用 Demo。 Hasor 使用的是“微内核 + 插件扩展”这种设计思想。...

哈库纳 ⋅ 2014/01/09 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Bean基础

1、Bean之间引用 <!--如果Bean配置在同一个XML文件中,使用local引用--><ref bean="someBean"/><!--如果Bean配置在不同的XML文件中,使用ref引用--><ref local="someBean"/> 其实两种......

霍淇滨 ⋅ 29分钟前 ⋅ 0

05、基于Consul+Upsync+Nginx实现动态负载均衡

1、Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/local/srcwget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip 解压consu......

北岩 ⋅ 32分钟前 ⋅ 0

Webpack 4 api 了解与使用

webpack 最近升级到了 v4.5+版 01 官方不再支持 node4 以下版本 官方不再支持 node4 以下版本官方不再支持 node4 以下的版本,所以如果你的node版本太低,先开始升级node吧!话说node10 ...

NDweb ⋅ 42分钟前 ⋅ 0

使用nodeJs安装Vue-cli

Vue脚手架就是一个Vue框架开发环境 脚手架的意思是帮你快速开始一个vue的项目,也就是给你一套vue的结构,包含基础的依赖库,只需要 npm install就可以安装,让我们不需要为了编辑或者一些其...

木筏笔歆 ⋅ 今天 ⋅ 0

【微信小程序开发实战】0x00.开发前准备工作

写在开始 本人资深后端码农一枚,近期项目需求,接触到了微信小程序,将学习过程整理成文分享给小伙伴们,由于是边学边整理难免有表述不对的地方,望大家及时指正,感谢。 本人微信号: dream...

dreamans ⋅ 今天 ⋅ 0

linux redis的安装和php7下安装redis扩展

安装redis服务器 (1)下载安装包: $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz (2)编译程序: $ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17 $ make $ cd src &&......

concat ⋅ 今天 ⋅ 0

Guava EventBus源码解析

一、EventBus使用场景示例 Guava EventBus是事件发布/订阅框架,采用观察者模式,通过解耦发布者和订阅者简化事件(消息)的传递。这有点像简化版的MQ,除去了Broker,由EventBus托管了订阅&...

SaintTinyBoy ⋅ 今天 ⋅ 0

http怎么做自动跳转https

Apache 版本 如果需要整站跳转,则在网站的配置文件的<Directory>标签内,键入以下内容: RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)?$ https://%{SERVER_NAME......

Helios51 ⋅ 今天 ⋅ 0

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 今天 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

java高级架构牛人 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部