我正在上传非常大的文件,这超过了可用的内存,因此我使用FileBuffer作为接收器。不幸的是,当上传一个大文件时,需要很长时间来保存它。相反,我宁愿在文件还在上传的时候就开始处理它。
那么是否有一种方法可以接收作为流的上传?或者我可以实现我自己的Receiver,但是我还需要在那个Receiver中实现我的整个处理逻辑吗?
是的,你可以实现你自己的Receiver
;像FileBuffer
和MemoryBuffer
这样的内置接收器只是覆盖基本用例的助手。Receiver
接口很简单:
public interface Receiver extends Serializable {
/**
* Invoked when a new upload arrives.
*
* @param fileName
* the desired filename of the upload, usually as specified by
* the client
* @param mimeType
* the MIME type of the uploaded file
* @return stream to which the uploaded file should be written
*/
OutputStream receiveUpload(String fileName, String mimeType);
}
你的任务是为上传组件提供OutputStream
来进行写入;在FileBuffer
的情况下,类正在创建一个File
对象和一个FileOutputStream
。如果您想自己处理流,您可以扩展FileOutputStream
或创建自定义OutputStream
并实现write
方法。BufferedOutputStream
也是一个很好的选择。