package com.wilutions.jsfs;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
public class MultipartFormDataInputStream extends InputStream {
/*
<FORM action="http://server.com/cgi/handle"
enctype="multipart/form-data"
method="post">
<P>
What is your name? <INPUT type="text" name="submit-name"><BR>
What files are you sending? <INPUT type="file" name="files"><BR>
<INPUT type="submit" value="Send"> <INPUT type="reset">
</FORM>
*/
/*
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="submit-name"
Larry
--AaB03x
Content-Disposition: form-data; name="files"
Content-Type: multipart/mixed; boundary=BbC04y
--BbC04y
Content-Disposition: file; filename="file1.txt"
Content-Type: text/plain
... contents of file1.txt ...
--BbC04y
Content-Disposition: file; filename="file2.gif"
Content-Type: image/gif
Content-Transfer-Encoding: binary
...contents of file2.gif...
--BbC04y--
--AaB03x--
*/
FormItem[] items;
int itemIdx = -1;
InputStream itemStream;
String boundary;
MultipartFormDataInputStream(FormItem[] items) {
this.items = items;
this.boundary = Long.toString(System.nanoTime(), 16);
final String s = "Content-Type: multipart/form-data; boundary=" + boundary + "\r\n\r\n";
itemStream = new ByteArrayInputStream(s.getBytes());
}
@Override
public int read() throws IOException {
int c = itemStream.read();
if (c == -1) {
itemIdx++;
if (itemIdx < items.length){
itemStream = new FormItemInputStream(items[itemIdx]);
c = itemStream.read();
}
else if (itemIdx == items.length) {
final String s = "--" + boundary + "--\r\n";
itemStream = new ByteArrayInputStream(s.getBytes());
}
}
return c;
}
private static class FormItemInputStream extends InputStream {
FormItem item;
InputStream itemStream;
FormItemInputStream(FormItem item) {
this.item = item;
}
@Override
public int read() throws IOException {
return 0;
}
}
}