📄 fileuploadtest.java
字号:
WebConversation wc = new WebConversation(); WebRequest request = new GetMethodWebRequest( getHostPath() + "/Default.html" ); WebResponse simplePage = wc.getResponse( request ); WebRequest formSubmit = simplePage.getForms()[0].getRequest(); try { formSubmit.setParameter( "message", new UploadFileSpec[] { new UploadFileSpec( file ), new UploadFileSpec( file2, "text/more" ) } ); fail( "Permitted two files on a single file parameter" ); } catch (IllegalRequestParameterException e) { } file.delete(); file2.delete(); } public void testInputStreamAsFile() throws Exception { ByteArrayInputStream bais = new ByteArrayInputStream( "Not much text\nBut two lines\n".getBytes() ); defineResource( "ListParams", new MimeEcho() ); defineWebPage( "Default", "<form method=POST action = \"ListParams\" enctype=\"multipart/form-data\"> " + "<Input type=file name=message>" + "<Input type=submit name=update value=age>" + "</form>" ); WebConversation wc = new WebConversation(); WebRequest request = new GetMethodWebRequest( getHostPath() + "/Default.html" ); WebResponse simplePage = wc.getResponse( request ); WebRequest formSubmit = simplePage.getForms()[0].getRequest(); formSubmit.selectFile( "message", "temp.txt", bais, "text/plain" ); WebResponse encoding = wc.getResponse( formSubmit ); assertEquals( "text/plain:message.name=temp.txt&message.lines=2&update=age", encoding.getText().trim() ); } public void testFileUploadWithoutForm() throws Exception { ByteArrayInputStream bais = new ByteArrayInputStream( "Not much text\nBut two lines\n".getBytes() ); defineResource( "ListParams", new MimeEcho() ); WebConversation wc = new WebConversation(); PostMethodWebRequest formSubmit = new PostMethodWebRequest( getHostPath() + "/ListParams" ); formSubmit.setMimeEncoded( true ); formSubmit.selectFile( "message", "temp.txt", bais, "text/plain" ); WebResponse encoding = wc.getResponse( formSubmit ); assertEquals( "text/plain:message.name=temp.txt&message.lines=2", encoding.getText().trim() ); } public void testFileContentType() throws Exception { File file = new File( "temp.gif" ); FileOutputStream fos = new FileOutputStream( file ); fos.write( new byte[] { 1, 2, 3, 4, 0x7f, 0x23 }, 0, 6 ); fos.close(); defineResource( "ListParams", new MimeEcho() ); defineWebPage( "Default", "<form method=POST action = \"ListParams\" enctype=\"multipart/form-data\"> " + "<Input type=file name=message>" + "</form>" ); WebConversation wc = new WebConversation(); WebRequest request = new GetMethodWebRequest( getHostPath() + "/Default.html" ); WebResponse simplePage = wc.getResponse( request ); WebRequest formSubmit = simplePage.getForms()[0].getRequest(); formSubmit.selectFile( "message", file ); WebResponse encoding = wc.getResponse( formSubmit ); assertEquals( "image/gif:message.name=temp.gif&message.lines=1", encoding.getText().trim() ); file.delete(); } public void testSpecifiedFileContentType() throws Exception { File file = new File( "temp.new" ); FileOutputStream fos = new FileOutputStream( file ); fos.write( new byte[] { 1, 2, 3, 4, 0x7f, 0x23 }, 0, 6 ); fos.close(); defineResource( "ListParams", new MimeEcho() ); defineWebPage( "Default", "<form method=POST action = \"ListParams\" enctype=\"multipart/form-data\"> " + "<Input type=file name=message>" + "</form>" ); WebConversation wc = new WebConversation(); WebRequest request = new GetMethodWebRequest( getHostPath() + "/Default.html" ); WebResponse simplePage = wc.getResponse( request ); WebRequest formSubmit = simplePage.getForms()[0].getRequest(); formSubmit.selectFile( "message", file, "x-application/new" ); WebResponse encoding = wc.getResponse( formSubmit ); assertEquals( "x-application/new:message.name=temp.new&message.lines=1", encoding.getText().trim() ); file.delete(); }}class ByteArrayDataSource implements DataSource { ByteArrayDataSource( String contentType, byte[] body ) { _contentType = contentType; _inputStream = new ByteArrayInputStream( body ); } public java.io.InputStream getInputStream() { return _inputStream; } public java.io.OutputStream getOutputStream() throws IOException { throw new IOException(); } public java.lang.String getContentType() { return _contentType; } public java.lang.String getName() { return "test"; } private String _contentType; private InputStream _inputStream;}class MimeEcho extends PseudoServlet { public WebResource getPostResponse() { StringBuffer sb = new StringBuffer(); try { String contentType = getHeader( "Content-Type" ); DataSource ds = new ByteArrayDataSource( contentType, getBody() ); MimeMultipart mm = new MimeMultipart( ds ); int numParts = mm.getCount(); for (int i = 0; i < numParts; i++) { appendPart( sb, (MimeBodyPart) mm.getBodyPart(i) ); if (i < numParts-1) sb.append( '&' ); } } catch (MessagingException e) { e.printStackTrace(); sb.append( "Oops: " + e ); } catch (IOException e) { e.printStackTrace(); sb.append( "Oops: " + e ); } return new WebResource( sb.toString(), "text/plain" ); } private void appendPart( StringBuffer sb, MimeBodyPart mbp ) throws IOException, MessagingException { String[] disposition = mbp.getHeader( "Content-Disposition" ); String name = getHeaderAttribute( disposition[0], "name" ); if (mbp.getFileName() == null) { appendFieldValue( name, sb, mbp ); } else { sb.append( mbp.getContentType() ).append( ':' ); appendFileSpecs( name, sb, mbp ); } } private void appendFieldValue( String parameterName, StringBuffer sb, MimeBodyPart mbp ) throws IOException, MessagingException { sb.append( parameterName ).append( "=" ).append( URLEncoder.encode( mbp.getContent().toString() ) ); } private void appendFileSpecs( String parameterName, StringBuffer sb, MimeBodyPart mbp ) throws IOException, MessagingException { String filename = mbp.getFileName(); filename = filename.substring( filename.lastIndexOf( File.separator )+1 ); BufferedReader br = new BufferedReader( new StringReader( mbp.getContent().toString() ) ); int numLines = 0; while (br.readLine() != null) numLines++; sb.append( parameterName ).append( ".name=" ).append( filename ).append( "&" ); sb.append( parameterName ).append( ".lines=" ).append( numLines ); } private String getHeaderAttribute( String headerValue, String attributeName ) { StringTokenizer st = new StringTokenizer( headerValue, ";=", /* returnTokens */ true ); int state = 0; String name = ""; while (st.hasMoreTokens()) { String token = st.nextToken(); if (token.equals( ";" )) { state = 1; // next token is attribute name } else if (token.equals( "=" )) { if (state == 1) { state = 2; // next token is attribute value } else { state = 0; // reset and keep looking } } else if (state == 1) { name = token.trim(); } else if (state == 2) { if (name.equalsIgnoreCase( attributeName )) { return stripQuotes( token.trim() ); } } } return ""; } private String stripQuotes( String value ) { if (value.startsWith( "\"" ) && value.endsWith( "\"" )) { return value.substring( 1, value.length()-1 ); } else { return value; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -