Java Applet文件上载不使用HttpCleints

时间:2013-06-10 18:07:54

标签: java http

我想使用Java Applets上传多个文件。

我使用Apache Http Client开发了一个有效的应用程序。

上面的问题是applet依赖作为Apache Http Client的Jar。

目前,我只需要为一个小功能[文件上传]导入/下载7个jars文件。

在生产环境中它非常增加下载时间。

所以我想要一个简单的库或Java类,通过它我们可以使用HTTP协议上传多个文件,并且可以获得简单的响应。

我在互联网上发现了这么多代码,但是有了它们,问题就从二进制上传开始了。

例如,   如果我们使用简单上传上传波形文件,在我们在服务器端收听时上传后,就会失真。

如果我们使用简单上传上传JPEG文件,我们在服务器端看到后上传  它的质量是不同的。

当我们使用apache http client时,我们不会遇到上述所有问题。

我使用了来自POST Upload Using URLConnection

的代码

如果我们使用Apache HTTP cleints进行上传有什么好处?

如果我们使用URLConnection上传二进制文件会出现什么问题?

如果我使用以下代码Multipart Request它会起作用吗?使用此代码有什么不利之处吗?

OR

任何人都有一个工作代码来上传多个二进制文件,使用HTTP协议唱出URL Connection类。

1 个答案:

答案 0 :(得分:0)

这是多部分缓冲上传的工作代码:

HttpURLConnection connection = null;
int uploadBufferLength = BUFFER_DEFAULT_LENGTH;
String CRLF = "\r\n";
String boundary = (new GUID()).toString();

try
{
  java.net.URL url = new URL( DEFAULT_URL );
  connection = (HttpURLConnection) url.openConnection();
  connection.setDoOutput( true );
  connection.setDoInput( true );
  connection.addRequestProperty( "Content-Type", "multipart/form-data; boundary=" + boundary );

  for( String key : getHeaders().keySet() )
    connection.addRequestProperty( key, getHeaders().get( key ) );

  outputStreamRouter.setOutputStream( connection.getOutputStream() );
  PrintWriter writer = new PrintWriter( new OutputStreamWriter( outputStreamRouter.getOutputStream(), "UTF-8" ), true );
  writer.append( "--" ).append( boundary ).append( CRLF );
  writer.append( "Content-Disposition: form-data; name=\"file\"; filename=\"" ).append( name ).append( "\"" ).append( CRLF );
  writer.append( "Content-Type: application/octet-stream" ).append( CRLF );
  writer.append( "Content-Transfer-Encoding: binary" ).append( CRLF );
  writer.append( CRLF ).flush();

  //This is custom OutputStream, which should be changed to your needs or a default
  outputStreamRouter.writeStream( uploadBufferLength );
  outputStreamRouter.flush();

  writer.append( CRLF ).flush();
  writer.append( "--" ).append( boundary ).append( "--" ).append( CRLF );
  writer.close();

  outputStreamRouter.close();

  if( connection.getResponseCode() != 200 )
  {
    //handle error
  }
  else
  {
    //handle result
  }
}
catch( MalformedURLException e )
{
  throw new IllegalArgumentException( ExceptionMessage.FILE_UPLOAD_ERROR, e );
}
catch( UnsupportedEncodingException e )
{
  throw new IllegalArgumentException( ExceptionMessage.FILE_UPLOAD_ERROR, e );
}
catch( IOException e )
{
  throw new IllegalStateException( ExceptionMessage.FILE_UPLOAD_ERROR, e.getMessage() );
}
finally
{
  if( connection != null )
    connection.disconnect();
}

您可以添加更多带有新边界的文件。 但基本上,使用Apache库将更容易实现并支持此代码。