1 /*
2 * $Source$
3 * $Revision$
4 *
5 * Copyright (C) 2000 Myles Chippendale
6 *
7 * Part of Melati (http://melati.org), a framework for the rapid
8 * development of clean, maintainable web applications.
9 *
10 * Melati is free software; Permission is granted to copy, distribute
11 * and/or modify this software under the terms either:
12 *
13 * a) the GNU General Public License as published by the Free Software
14 * Foundation; either version 2 of the License, or (at your option)
15 * any later version,
16 *
17 * or
18 *
19 * b) any version of the Melati Software License, as published
20 * at http://melati.org
21 *
22 * You should have received a copy of the GNU General Public License and
23 * the Melati Software License along with this program;
24 * if not, write to the Free Software Foundation, Inc.,
25 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
26 * GNU General Public License and visit http://melati.org to obtain the
27 * Melati Software License.
28 *
29 * Feel free to contact the Developers of Melati (http://melati.org),
30 * if you would like to work out a different arrangement than the options
31 * outlined here. It is our intention to allow Melati to be used by as
32 * wide an audience as possible.
33 *
34 * This program is distributed in the hope that it will be useful,
35 * but WITHOUT ANY WARRANTY; without even the implied warranty of
36 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
37 * GNU General Public License for more details.
38 *
39 * Contact details for copyright holder:
40 *
41 * Mylesc Chippendale <mylesc At paneris.org>
42 * http://paneris.org/
43 * 29 Stanley Road, Oxford, OX4 1QY, UK
44 */
45
46 package org.melati.servlet;
47
48 import java.io.File;
49 import java.io.ByteArrayOutputStream;
50 import java.io.IOException;
51 import org.melati.util.DelimitedBufferedInputStream;
52
53 /**
54 * Store the uploaded data in a byte array in memory.
55 */
56 public class MemoryFormDataAdaptor implements FormDataAdaptor {
57 /** Size for byte buffers */
58 protected int BUFSIZE = 512;
59
60 private byte[] data = new byte[0];
61
62 /**
63 * Return the data as a byte array.
64 * @return the data as a byte array
65 */
66 public byte[] getData() {
67 return data;
68 }
69
70 /**
71 * Return the size of the data.
72 * @return the size of the data
73 */
74 public long getSize() {
75 return data.length;
76 }
77
78 /**
79 * Return a File object pointing to the saved data (if one exists).
80 * @return always <code>null</code>
81 */
82 public File getFile() {
83 return null;
84 }
85
86 /**
87 * Return a url to the object.
88 * @return always null
89 */
90 public String getURL() {
91 return null;
92 }
93
94 /**
95 * Read data from in until the delim and save it
96 * in an internal buffer for later use.
97 *
98 * @param field a {@link MultipartFormField} to be read
99 * @param in a {@link DelimitedBufferedInputStream} to read from
100 * @param delim the delimitor to differentiate elements
101 * @throws IOException if there is a problem reading the input
102 */
103 public void readData(MultipartFormField field,
104 DelimitedBufferedInputStream in,
105 byte[] delim)
106 throws IOException {
107
108 ByteArrayOutputStream out = new ByteArrayOutputStream();
109 byte[] buff = new byte[BUFSIZE];
110 int count;
111
112 try {
113 while ((count = in.readToDelimiter(buff, 0, buff.length, delim)) > 0)
114 out.write(buff, 0, count);
115 if (count == -1)
116 throw new IOException(
117 "Didn't find boundary whilst reading field data");
118 data = out.toByteArray();
119 }
120 catch (IOException e) {
121 throw e;
122 }
123 finally {
124 try {
125 out.close();
126 out = null;
127 }
128 catch (Exception e) {
129 // Thrown above
130 e = null; // shut PMD up
131 }
132 }
133 }
134 }
135
136
137
138
139
140