-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCBFilePart.java
More file actions
87 lines (75 loc) · 3.32 KB
/
Copy pathCBFilePart.java
File metadata and controls
87 lines (75 loc) · 3.32 KB
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
Copyright (c) 2013 Cloudbase.io Limited
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License
is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the specific language governing permissions and limitations under
the License.
*/
package com.cloudbase;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.http.protocol.HTTP;
public final class CBFilePart extends CBBasePart {
private final File file;
/**
* @param name String - name of parameter (may not be <code>null</code>).
* @param file File (may not be <code>null</code>).
* @param filename String. If <code>null</code> is passed,
* then <code>file.getName()</code> is used.
* @param contentType String. If <code>null</code> is passed,
* then default "application/octet-stream" is used.
*
* @throws IllegalArgumentException if either <code>file</code>
* or <code>name</code> is <code>null</code>.
*/
public CBFilePart(String name, File file, String filename, String contentType) {
if (file == null) {
throw new IllegalArgumentException("File may not be null"); //$NON-NLS-1$
}
if (name == null) {
throw new IllegalArgumentException("Name may not be null"); //$NON-NLS-1$
}
this.file = file;
final String partName = CBUrlEncodingHelper.encode(name, HTTP.DEFAULT_PROTOCOL_CHARSET);
final String partFilename = CBUrlEncodingHelper.encode(
(filename == null) ? file.getName() : filename,
HTTP.DEFAULT_PROTOCOL_CHARSET
);
final String partContentType = (contentType == null) ? HTTP.DEFAULT_CONTENT_TYPE : contentType;
headersProvider = new IHeadersProvider() {
public String getContentDisposition() {
return "Content-Disposition: form-data; name=\"" + partName //$NON-NLS-1$
+ "\"; filename=\"" + partFilename + '"'; //$NON-NLS-1$
}
public String getContentType() {
return "Content-Type: " + partContentType; //$NON-NLS-1$
}
public String getContentTransferEncoding() {
return "Content-Transfer-Encoding: binary"; //$NON-NLS-1$
}
};
}
public long getContentLength(CBBoundary boundary) {
return getHeader(boundary).length + file.length() + CRLF.length;
}
public void writeTo(OutputStream out, CBBoundary boundary) throws IOException {
out.write(getHeader(boundary));
InputStream in = new FileInputStream(file);
try {
byte[] tmp = new byte[4096];
int l;
while ((l = in.read(tmp)) != -1) {
out.write(tmp, 0, l);
}
} finally {
in.close();
}
out.write(CRLF);
}
}