我想使用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类。
答案 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库将更容易实现并支持此代码。