Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java小程序文件上载不使用HttpCleints_Java_Http - Fatal编程技术网

Java小程序文件上载不使用HttpCleints

Java小程序文件上载不使用HttpCleints,java,http,Java,Http,我想用Java小程序上传多个文件 我使用ApacheHTTP客户端开发了一个工作应用程序 上面的问题是小程序依赖性作为Apache Http客户端的Jar 目前,我只需要为一个小功能[文件上传]导入/下载7个jars文件 在生产环境中,它大大增加了下载时间 所以我想要一个简单的库或Java类,通过它我们可以使用HTTP协议上传多个文件,并且可以得到一个简单的响应 我在互联网上找到了这么多的代码,但问题开始于二进制上传 比如说,, 如果我们使用简单的上传上传来上传一个wave文件,当我们在服务器端

我想用Java小程序上传多个文件

我使用ApacheHTTP客户端开发了一个工作应用程序

上面的问题是小程序依赖性作为Apache Http客户端的Jar

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

在生产环境中,它大大增加了下载时间

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

我在互联网上找到了这么多的代码,但问题开始于二进制上传

比如说,, 如果我们使用简单的上传上传来上传一个wave文件,当我们在服务器端监听它时,上传后的wave文件是失真的

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

当我们使用ApacheHTTP客户端时,我们不会遇到上述所有问题

我使用了POST上的代码

如果我们使用ApacheHTTPCleints进行上传,有什么好处

如果使用URLConnection上载二进制文件,会出现什么问题

如果我使用以下代码,它会工作吗?使用这个代码有什么缺点吗


任何人都有使用HTTP协议通过URL连接类上载多个二进制文件的工作代码。

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

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();
}
可以添加更多具有新边界的文件。
但是基本上,使用ApacheLibs将更容易实现和支持此代码。

ApacheHTTP客户端的优点是它有一个比JDK中的等效类更好的API。7罐真的那么多吗?什么是1MB。。。。比如说网页上一张照片的大小?如果可以的话,我建议你使用它。如果没有,您肯定可以使JDK类(URLConnection)正常工作,只是麻烦多一点。如果你这样做的话,就把你的具体问题发出来。7个罐子不是问题,但在IE上下载需要2分钟2次,在chrome上下载需要1.30分钟,在较低的互联网连接上下载需要4分钟。正如我所说的,我已经在我的应用程序中成功地使用了Apache Http Cleint,但是现在当加载小程序时,依赖项产生了问题。@Micheal谢谢。它也适用于二进制文件吗?提到多部分,你的意思是我们模仿浏览器上传后的内容吗?这应该适用于二进制文件。@Micheal我试过你的代码,其中缺少一些东西。我试过了,太好了,谢谢你的回答。我在评论中说,你需要你的OutputStream写逻辑。如果你需要的话,我可以给你发一些变体。