package railo.commons.io.res.type.s3; import java.io.IOException; import java.io.OutputStream; import java.net.SocketException; import railo.commons.io.TemporaryStream; import railo.commons.lang.ExceptionUtil; import railo.commons.lang.StringUtil; import railo.commons.net.http.httpclient3.HTTPEngine3Impl; public final class S3ResourceOutputStream extends OutputStream { private final S3 s3; private final String contentType="application"; private final String bucketName; private final String objectName; private final int acl; private TemporaryStream ts; public S3ResourceOutputStream(S3 s3,String bucketName,String objectName,int acl) { this.s3=s3; this.bucketName=bucketName; this.objectName=objectName; this.acl=acl; ts = new TemporaryStream(); } @Override public void close() throws IOException { ts.close(); //InputStream is = ts.getInputStream(); try { s3.put(bucketName, objectName, acl, HTTPEngine3Impl.getTemporaryStreamEntity(ts,contentType)); } catch (SocketException se) { String msg = StringUtil.emptyIfNull(se.getMessage()); if(StringUtil.indexOfIgnoreCase(msg, "Socket closed")==-1) throw se; } catch (Exception e) { throw ExceptionUtil.toIOException(e); } } @Override public void flush() throws IOException { ts.flush(); } @Override public void write(byte[] b, int off, int len) throws IOException { ts.write(b, off, len); } @Override public void write(byte[] b) throws IOException { ts.write(b); } @Override public void write(int b) throws IOException { ts.write(b); } }