View Javadoc
1   /*
2    * ====================================================================
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
19   * ====================================================================
20   *
21   * This software consists of voluntary contributions made by many
22   * individuals on behalf of the Apache Software Foundation.  For more
23   * information on the Apache Software Foundation, please see
24   * <http://www.apache.org/>.
25   *
26   */
27  
28  package com.foxinmy.weixin4j.http.apache.content;
29  
30  import java.io.IOException;
31  import java.io.InputStream;
32  import java.io.OutputStream;
33  
34  import com.foxinmy.weixin4j.http.ContentType;
35  import com.foxinmy.weixin4j.http.apache.mime.MIME;
36  
37  /**
38   * Binary body part backed by an input stream.
39   *
40   * @see org.apache.http.entity.mime.MultipartEntityBuilder
41   *
42   * @since 4.0
43   */
44  public class InputStreamBody extends AbstractContentBody {
45  
46  	private final InputStream in;
47  	private final String filename;
48  
49  	/**
50  	 * @since 4.1
51  	 *
52  	 */
53  	public InputStreamBody(final InputStream in, final String mimeType,
54  			final String filename) {
55  		this(in, ContentType.create(mimeType), filename);
56  	}
57  
58  	public InputStreamBody(final InputStream in, final String filename) {
59  		this(in, ContentType.DEFAULT_BINARY, filename);
60  	}
61  
62  	/**
63  	 * @since 4.3
64  	 */
65  	public InputStreamBody(final InputStream in, final ContentType contentType,
66  			final String filename) {
67  		super(contentType);
68  		this.in = in;
69  		this.filename = filename;
70  	}
71  
72  	/**
73  	 * @since 4.3
74  	 */
75  	public InputStreamBody(final InputStream in, final ContentType contentType) {
76  		this(in, contentType, null);
77  	}
78  
79  	public InputStream getInputStream() {
80  		return this.in;
81  	}
82  
83  	@Override
84  	public void writeTo(final OutputStream out) throws IOException {
85  		try {
86  			final byte[] tmp = new byte[4096];
87  			int l;
88  			while ((l = this.in.read(tmp)) != -1) {
89  				out.write(tmp, 0, l);
90  			}
91  			out.flush();
92  		} finally {
93  			this.in.close();
94  		}
95  	}
96  
97  	@Override
98  	public String getTransferEncoding() {
99  		return MIME.ENC_BINARY;
100 	}
101 
102 	@Override
103 	public long getContentLength() {
104 		try {
105 			return in.available();
106 		} catch (IOException e) {
107 			return -1;
108 		}
109 	}
110 
111 	@Override
112 	public String getFilename() {
113 		return this.filename;
114 	}
115 
116 }