1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.client5.http.entity.mime;
29
30 import java.io.IOException;
31 import java.io.InputStream;
32 import java.io.OutputStream;
33
34 import org.apache.hc.core5.http.ContentType;
35 import org.apache.hc.core5.util.Args;
36
37
38
39
40
41
42
43
44 public class InputStreamBody extends AbstractContentBody {
45
46 private final InputStream in;
47 private final String filename;
48 private final long contentLength;
49
50 public InputStreamBody(final InputStream in, final String filename) {
51 this(in, ContentType.DEFAULT_BINARY, filename);
52 }
53
54
55
56
57 public InputStreamBody(final InputStream in, final ContentType contentType, final String filename) {
58 this(in, contentType, filename, -1);
59 }
60
61
62
63
64 public InputStreamBody(final InputStream in, final ContentType contentType, final String filename, final long contentLength) {
65 super(contentType);
66 Args.notNull(in, "Input stream");
67 this.in = in;
68 this.filename = filename;
69 this.contentLength = contentLength >= 0 ? contentLength : -1;
70 }
71
72
73
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 Args.notNull(out, "Output stream");
86 try {
87 final byte[] tmp = new byte[4096];
88 int l;
89 while ((l = this.in.read(tmp)) != -1) {
90 out.write(tmp, 0, l);
91 }
92 out.flush();
93 } finally {
94 this.in.close();
95 }
96 }
97
98 @Override
99 public long getContentLength() {
100 return this.contentLength;
101 }
102
103 @Override
104 public String getFilename() {
105 return this.filename;
106 }
107
108 }