/*
* Copyright 2008-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.hasor.web.upload.factorys.disk;
import net.hasor.core.utils.IOUtils;
import net.hasor.web.FileItem;
import net.hasor.web.FileItemFactory;
import net.hasor.web.FileItemStream;
import net.hasor.web.upload.FileItemBase;
import java.io.*;
import java.util.UUID;
/**
*
* @version : 2015年2月11日
* @author 赵永春(zyc@hasor.net)
*/
public class DiskFileItemFactory implements FileItemFactory {
private File cacheDirectory;
//
public DiskFileItemFactory() {
}
public DiskFileItemFactory(String cacheDirectory) {
this.cacheDirectory = new File(cacheDirectory);
}
//
//
public File getCacheDirectory() {
return cacheDirectory;
}
public void setCacheDirectory(File cacheDirectory) {
this.cacheDirectory = cacheDirectory;
}
@Override
public FileItem createItem(FileItemStream itemStream) throws IOException {
String fid = UUID.randomUUID().toString() + ".tmp";
//
if (itemStream.isFormField()) {
return new MemoryFileItem(itemStream);
} else {
return createDiskFileItem(itemStream, fid);
}
}
protected FileItem createDiskFileItem(FileItemStream itemStream, String fid) throws IOException {
return new DiskFileItem(itemStream, new File(cacheDirectory, fid));
}
//
//
public static class MemoryFileItem extends FileItemBase {
private byte[] cachedContent;
public MemoryFileItem(FileItemStream stream) throws IOException {
super(stream);
ByteArrayOutputStream arrays = new ByteArrayOutputStream();
IOUtils.copy(stream.openStream(), arrays);
this.cachedContent = arrays.toByteArray();
}
@Override
public long getSize() {
if (this.cachedContent != null) {
return this.cachedContent.length;
} else {
return 0;
}
}
@Override
public void deleteOrSkip() {
}
@Override
public InputStream openStream() throws IOException {
if (this.cachedContent == null) {
return null;
}
return new ByteArrayInputStream(this.cachedContent);
}
}
}