Date: 2005-03-03T00:03:17 Editor: DakotaJack Wiki: Apache Struts Wiki Page: StrutsUpload URL: http://wiki.apache.org/struts/StrutsUpload
no comment Change Log: ------------------------------------------------------------------------------ @@ -8,20 +8,22 @@ === Framework Code === - 1. !MultipartFile Interface - 2. !MultipartData Interface - 3. !MultipartHandler Interface - 4. !MultipartUtil Class + 1. !MultipartFile + 2. !MultipartData + 3. !MultipartHandler + 4. !MultipartUtil === Sample Implementation Code === - 1. !UploadMultipartFile Class - 2. !UploadMultipartData Class - 3. !UploadMultipartHandler Class + 1. !UploadMultipartFile (implements !MultipartFile) + 2. !UploadMultipartData (implements !MultipartData) + 3. !UploadMultipartHandler (implements !MultipartHandler) === Sample Application Code Pieces === - 1. !UploadOutputStream + 1. !UploadOutputStream (extends org.apache.commons.fileupload.!DeferredFileOutputStream) + 2. !UploadFileItem (implements org.apache.commons.fileupload.!FileItem) + 3. !UploadFileItemFactory (extends org.apache.commons.fileupload.!DefaultFileItemFactory) == Code == @@ -385,6 +387,256 @@ monitor.read(j); } } + } +} +}}} + +=== UploadFileItem === + +{{{ +public class UploadFileItem + implements FileItem { + private static volatile int number = 0; + private UploadOutputStream uos; + private File tempDir; + private List monitors; + private String fieldName; + private String contentType; + private String fileName; + private byte [] data; + private int threshold; + private int totalSize; + private boolean isFormField; + + public UploadFileItem(String fieldName, + String contentType, + boolean isFormField, + String fileName, + List monitors, + File tempDir, + int threshold, + int totalSize) { + this.fieldName = fieldName; + this.contentType = contentType; + this.isFormField = isFormField; + this.fileName = fileName; + this.monitors = monitors; + this.tempDir = tempDir; + this.threshold = threshold; + this.totalSize = totalSize; + } + + public InputStream getInputStream() + throws IOException { + if(!this.uos.isInMemory()) { + return new FileInputStream(uos.getFile()); + } + + if(data == null) { + data = this.uos.getData(); + } + + return new ByteArrayInputStream(data); + } + + public String getContentType() { + return contentType; + } + + public String getName() { + return fileName; + } + + public boolean isInMemory() { + return uos.isInMemory(); + } + + public long getSize() { + if(data != null) { + return (long)data.length; + } + + if(this.uos.isInMemory()) { + return (long)uos.getData().length; + } else { + return uos.getFile().length(); + } + } + + public byte[] get() { + if(uos.isInMemory()) { + if(data == null) { + data = uos.getData(); + } + + return data; + } + + byte fisData[] = new byte[(int)getSize()]; + FileInputStream fis = null; + try { + fis = new FileInputStream(uos.getFile()); + fis.read(fisData); + } catch(IOException ioe) { + fisData = null; + } finally { + if(fis != null) { + try { + fis.close(); + } catch(IOException ioe1) { } + } + } + return fisData; + } + + public String getString(String encoding) + throws UnsupportedEncodingException { + return new String(get(), encoding); + } + + public String getString() { + return new String(get()); + } + + public void write(File file) + throws Exception { + if(isInMemory()) { + FileOutputStream fos = null; + try { + fos = new FileOutputStream(file); + fos.write(get()); + } finally { + if(fos != null) { + fos.close(); + } + } + } else { + File outputFile = uos.getFile(); + + if(outputFile != null) { + if(!outputFile.renameTo(file)) { + BufferedInputStream bis = null; + BufferedOutputStream bos = null; + try { + bis = new BufferedInputStream(new FileInputStream(outputFile)); + bos = new BufferedOutputStream(new FileOutputStream(file)); + byte streamData[] = new byte[UploadConstant.STREAM_BUFFER_SIZE]; + for(int i = 0; (i = bis.read(streamData)) != -1;) + bos.write(streamData, 0, i); + } finally { + try { + bis.close(); + } catch(IOException ioe) { } + try { + bos.close(); + } catch(IOException ioe1) { } + } + } + } else { + throw new IOException(UploadConstant.WRITE_ERROR); + } + } + } + + public void delete() { + data = null; + File file = uos.getFile(); + if(file != null && file.exists()) { + file.delete(); + } + } + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public boolean isFormField() { + return isFormField; + } + + public void setFormField(boolean isFormField) { + this.isFormField = isFormField; + } + + protected void finalize() { + File file = uos.getFile(); + if(file != null && file.exists()) { + file.delete(); + } + } + + public OutputStream getOutputStream() + throws IOException { + if(uos == null) { + File file = tempDir; + + if(file == null) { + file = new File(UploadConstant.PARSER_TEMP_DIR); + } + + String fileName = UploadConstant.FILE_PREFIX + (number++) + UploadConstant.TMP_EXT; + File outputFile = new File(file, fileName); + + outputFile.deleteOnExit(); + + uos = new UploadOutputStream(threshold, outputFile, monitors, isFormField()); + + if(this.monitors != null && !isFormField()) { + for(int i = 0; i < monitors.size(); i++) { + Monitor monitor = (Monitor)monitors.get(i); + monitor.init(outputFile, totalSize, getContentType()); + } + + } + } + return this.uos; + } +} +}}} + +=== UploadFileItemFactory === + +{{{ +public class UploadFileItemFactory + extends DefaultFileItemFactory { + private List monitors; + private int contentLength; + + public UploadFileItemFactory() { + } + + public FileItem createItem(String fieldName, + String contentType, + boolean isFormField, + String fileName) { + return new UploadFileItem(fieldName, + contentType, + isFormField, + fileName, + monitors, + getRepository(), + getSizeThreshold(), + contentLength); + } + + public void setContentLength(int contentLength) { + this.contentLength = contentLength; + } + + public int getContentLength() { + return contentLength; + } + + public void setMonitors(List monitors) { + this.monitors = monitors; + } + + public List getMonitors() { + return this.monitors; } } }}} --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]