use of javax.servlet.http.Part in project jetty.project by eclipse.
the class MultiPartInputStreamTest method testMultiSameNames.
@Test
public void testMultiSameNames() throws Exception {
String sameNames = "--AaB03x\r\n" + "content-disposition: form-data; name=\"stuff\"; filename=\"stuff1.txt\"\r\n" + "Content-Type: text/plain\r\n" + "\r\n" + "00000\r\n" + "--AaB03x\r\n" + "content-disposition: form-data; name=\"stuff\"; filename=\"stuff2.txt\"\r\n" + "Content-Type: text/plain\r\n" + "\r\n" + "110000000000000000000000000000000000000000000000000\r\n" + "--AaB03x--\r\n";
MultipartConfigElement config = new MultipartConfigElement(_dirname, 1024, 3072, 50);
MultiPartInputStreamParser mpis = new MultiPartInputStreamParser(new ByteArrayInputStream(sameNames.getBytes()), _contentType, config, _tmpDir);
mpis.setDeleteOnExit(true);
Collection<Part> parts = mpis.getParts();
assertEquals(2, parts.size());
for (Part p : parts) assertEquals("stuff", p.getName());
//if they all have the name name, then only retrieve the first one
Part p = mpis.getPart("stuff");
assertNotNull(p);
assertEquals(5, p.getSize());
}
use of javax.servlet.http.Part in project jetty.project by eclipse.
the class MultiPartInputStreamTest method testMulti.
private void testMulti(String filename) throws IOException, ServletException, InterruptedException {
MultipartConfigElement config = new MultipartConfigElement(_dirname, 1024, 3072, 50);
MultiPartInputStreamParser mpis = new MultiPartInputStreamParser(new ByteArrayInputStream(createMultipartRequestString(filename).getBytes()), _contentType, config, _tmpDir);
mpis.setDeleteOnExit(true);
Collection<Part> parts = mpis.getParts();
assertThat(parts.size(), is(2));
//field 1 too small to go into tmp file, should be in internal buffer
Part field1 = mpis.getPart("field1");
assertThat(field1, notNullValue());
assertThat(field1.getName(), is("field1"));
InputStream is = field1.getInputStream();
ByteArrayOutputStream os = new ByteArrayOutputStream();
IO.copy(is, os);
assertEquals("Joe Blow", new String(os.toByteArray()));
assertEquals(8, field1.getSize());
//in internal buffer
assertNotNull(((MultiPartInputStreamParser.MultiPart) field1).getBytes());
field1.write("field1.txt");
//no longer in internal buffer
assertNull(((MultiPartInputStreamParser.MultiPart) field1).getBytes());
File f = new File(_dirname + File.separator + "field1.txt");
assertTrue(f.exists());
//write after having already written
field1.write("another_field1.txt");
File f2 = new File(_dirname + File.separator + "another_field1.txt");
assertTrue(f2.exists());
//should have been renamed
assertFalse(f.exists());
//file should be deleted
field1.delete();
//original file was renamed
assertFalse(f.exists());
//2nd written file was explicitly deleted
assertFalse(f2.exists());
MultiPart stuff = (MultiPart) mpis.getPart("stuff");
assertThat(stuff.getSubmittedFileName(), is(filename));
assertThat(stuff.getContentType(), is("text/plain"));
assertThat(stuff.getHeader("Content-Type"), is("text/plain"));
assertThat(stuff.getHeaders("content-type").size(), is(1));
assertThat(stuff.getHeader("content-disposition"), is("form-data; name=\"stuff\"; filename=\"" + filename + "\""));
assertThat(stuff.getHeaderNames().size(), is(2));
assertThat(stuff.getSize(), is(51L));
File tmpfile = ((MultiPartInputStreamParser.MultiPart) stuff).getFile();
// longer than 100 bytes, should already be a tmp file
assertThat(tmpfile, notNullValue());
//not in an internal buffer
assertThat(((MultiPartInputStreamParser.MultiPart) stuff).getBytes(), nullValue());
assertThat(tmpfile.exists(), is(true));
assertThat(tmpfile.getName(), is(not("stuff with space.txt")));
stuff.write(filename);
f = new File(_dirname + File.separator + filename);
assertThat(f.exists(), is(true));
assertThat(tmpfile.exists(), is(false));
try {
stuff.getInputStream();
} catch (Exception e) {
fail("Part.getInputStream() after file rename operation");
}
//clean up after test
f.deleteOnExit();
}
use of javax.servlet.http.Part in project jetty.project by eclipse.
the class MultiPartInputStreamTest method testBodyAlreadyConsumed.
@Test
public void testBodyAlreadyConsumed() throws Exception {
ServletInputStream is = new ServletInputStream() {
@Override
public boolean isFinished() {
return true;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener readListener) {
}
@Override
public int read() throws IOException {
return 0;
}
};
MultipartConfigElement config = new MultipartConfigElement(_dirname, 1024, 3072, 50);
MultiPartInputStreamParser mpis = new MultiPartInputStreamParser(is, _contentType, config, _tmpDir);
mpis.setDeleteOnExit(true);
Collection<Part> parts = mpis.getParts();
assertEquals(0, parts.size());
}
use of javax.servlet.http.Part in project jetty.project by eclipse.
the class MultiPartInputStreamTest method testPartTmpFileDeletion.
@Test
public void testPartTmpFileDeletion() throws Exception {
MultipartConfigElement config = new MultipartConfigElement(_dirname, 1024, 3072, 50);
MultiPartInputStreamParser mpis = new MultiPartInputStreamParser(new ByteArrayInputStream(createMultipartRequestString("tptfd").getBytes()), _contentType, config, _tmpDir);
mpis.setDeleteOnExit(true);
Collection<Part> parts = mpis.getParts();
MultiPart part = (MultiPart) mpis.getPart("stuff");
File stuff = ((MultiPartInputStreamParser.MultiPart) part).getFile();
// longer than 100 bytes, should already be a tmp file
assertThat(stuff, notNullValue());
assertThat(stuff.exists(), is(true));
part.cleanUp();
//tmp file was removed after cleanup
assertThat(stuff.exists(), is(false));
}
use of javax.servlet.http.Part in project jetty.project by eclipse.
the class MultiPartInputStreamTest method testCROnlyRequest.
@Test
public void testCROnlyRequest() throws Exception {
String str = "--AaB03x\r" + "content-disposition: form-data; name=\"field1\"\r" + "\r" + "Joe Blow\r" + "--AaB03x\r" + "content-disposition: form-data; name=\"field2\"\r" + "\r" + "Other\r" + "--AaB03x--\r";
MultipartConfigElement config = new MultipartConfigElement(_dirname, 1024, 3072, 50);
MultiPartInputStreamParser mpis = new MultiPartInputStreamParser(new ByteArrayInputStream(str.getBytes()), _contentType, config, _tmpDir);
mpis.setDeleteOnExit(true);
Collection<Part> parts = mpis.getParts();
assertThat(parts.size(), is(2));
assertThat(parts.size(), is(2));
Part p1 = mpis.getPart("field1");
assertThat(p1, notNullValue());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IO.copy(p1.getInputStream(), baos);
assertThat(baos.toString("UTF-8"), is("Joe Blow"));
Part p2 = mpis.getPart("field2");
assertThat(p2, notNullValue());
baos = new ByteArrayOutputStream();
IO.copy(p2.getInputStream(), baos);
assertThat(baos.toString("UTF-8"), is("Other"));
}
Aggregations