让我们整理一下:
首先,您必须定义是否要将数据直接上传到byte[] 缓冲区或临时文件以及支持的最大大小。这就是为什么你必须在某个地方定义两个参数的原因。
现在您需要定义这些参数的位置取决于您使用的组件(即 seam fileUpload 组件或richfaces fileUpload 组件)以及为您的应用程序安装的技术。让我们看看:
如果您使用带有richfaces 的seam 框架并且您不需要ajax 支持(即在上传完成后显示正在加载的图像),<s:fileUpload> 将是一个不错的选择,要配置它,您必须更改您的 seam components.xml 这样归档:
<web:multipart-filter create-temp-files="true"
max-request-size="1000000"
url-pattern="*.seam" />
这意味着您发送到服务器的数据将保存在一个临时文件中,并且支持的最大大小为1000000(约1M)。更多信息可以在这里找到:http://seamframework.org/Documentation/HowToUploadAndDownloadFilesInSeam
现在使用相同的技术堆栈(seam + richfaces),但在这种情况下,您需要使用 ajax 支持。在这种情况下,<rich:fileUpload> 将是您的选择。要配置它,只需在 web.xml 文件中定义的接缝过滤器中更改它:
<filter>
<filter-name>Seam Filter</filter-name>
<filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
<init-param>
<param-name>createTempFiles</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>maxRequestSize</param-name>
<param-value>10000000</param-value>
</init-param>
</filter>
请注意,尽管两种情况下的参数相同,但它们是在不同的地方定义的——我想这在带有 CDDI 的 JEE6 中有所改变——。
如果您的应用程序不使用 seam 框架但它确实使用了richfaces,您可能必须在web.xml 中再次在相应的richfaces 过滤器中定义此参数。
现在是有趣的部分,<rich:fileUpload> 的用法。这是使用该组件的名为 BlockEdit.xhtml 的文件的相关部分:
<rich:fileUpload
fileUploadListener="#{blockHome.sketchListener}"
maxFilesQuantity="1"
reRender="table"
id="upload"
immediateUpload="true"
acceptedTypes="jpg, gif, png, bmp">
<a:support event="onuploadcomplete" reRender="sketchImage" />
</rich:fileUpload>
这是BlockHome.java的fileUploadListener
public void sketchListener(UploadEvent event) {
UploadItem item = event.getUploadItem();
logger.info("Sketch listener executed ...");
if(item != null && item.getData() != null) {
logger.info(item.getFileName()+" "+item.getFileSize());
getInstance().getSketch().setData(item.getData());
getInstance().getSketch().setName(item.getFileName());
getInstance().getSketch().setContentType(item.getContentType());
getInstance().getSketch().setSize(item.getFileSize());
}
}
如果您在 web.xml 的接缝过滤器内配置的createTempFiles 是:
<init-param>
<param-name>createTempFiles</param-name>
<param-value>false</param-value>
</init-param>
那么 item.getData() 将不为空。但是,如果您将参数createTempFiles 定义为true,那么如果您想知道它是否有值,则应该询问 item.getFile()。这是因为 item.getData() 仅在您决定避免创建临时文件时才被填充,如 Richfaces demo fileUpload documentation 中所述。
FileUpload 使用了两个应该在 Filter 中定义的初始化参数
web.xml 中的定义:
createTempFiles布尔属性,它定义了是否
上传的文件存储在临时文件中或在侦听器中可用
就像 byte[] 数据(本例中为 false)。
maxRequestSize 属性定义最大大小(以字节为单位)
上传的文件(本例为 1000000)。
希望对你有帮助