Skip to content

Commit 6d30545

Browse files
committed
bug: fix file upload
1 parent 6267b17 commit 6d30545

1 file changed

Lines changed: 63 additions & 0 deletions

File tree

src/main/java/io/getstream/services/framework/StreamRequest.java

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
import com.fasterxml.jackson.core.type.TypeReference;
55
import com.fasterxml.jackson.databind.ObjectMapper;
66
import io.getstream.exceptions.StreamException;
7+
import io.getstream.models.UploadFileRequest;
8+
import io.getstream.models.UploadImageRequest;
79
import io.getstream.models.framework.RateLimit;
810
import io.getstream.models.framework.StreamResponse;
11+
import java.io.File;
912
import java.io.IOException;
1013
import java.util.Date;
1114
import java.util.List;
@@ -38,6 +41,10 @@ public StreamRequest(
3841
RequestBody rawBody;
3942
if (List.of("GET", "DELETE", "HEAD", "OPTIONS").contains(method) || jRequest == null) {
4043
rawBody = null;
44+
} else if (jRequest instanceof UploadFileRequest) {
45+
rawBody = createMultipartBody((UploadFileRequest) jRequest);
46+
} else if (jRequest instanceof UploadImageRequest) {
47+
rawBody = createMultipartBody((UploadImageRequest) jRequest);
4148
} else {
4249
rawBody = RequestBody.create(objectMapper.writeValueAsBytes(jRequest));
4350
}
@@ -103,6 +110,62 @@ public HttpUrl buildUrl(
103110
return urlBuilder.build();
104111
}
105112

113+
private RequestBody createMultipartBody(UploadFileRequest request) throws IOException {
114+
if (request.getFile() == null || request.getFile().isEmpty()) {
115+
throw new IllegalArgumentException("File path must be provided");
116+
}
117+
118+
File file = new File(request.getFile());
119+
if (!file.exists()) {
120+
throw new IOException("File not found: " + request.getFile());
121+
}
122+
123+
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
124+
125+
// Add file
126+
RequestBody fileBody = RequestBody.create(file, MediaType.parse("application/octet-stream"));
127+
builder.addFormDataPart("file", file.getName(), fileBody);
128+
129+
// Add user field if present
130+
if (request.getUser() != null) {
131+
String userJson = objectMapper.writeValueAsString(request.getUser());
132+
builder.addFormDataPart("user", userJson);
133+
}
134+
135+
return builder.build();
136+
}
137+
138+
private RequestBody createMultipartBody(UploadImageRequest request) throws IOException {
139+
if (request.getFile() == null || request.getFile().isEmpty()) {
140+
throw new IllegalArgumentException("File path must be provided");
141+
}
142+
143+
File file = new File(request.getFile());
144+
if (!file.exists()) {
145+
throw new IOException("File not found: " + request.getFile());
146+
}
147+
148+
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
149+
150+
// Add file
151+
RequestBody fileBody = RequestBody.create(file, MediaType.parse("image/*"));
152+
builder.addFormDataPart("file", file.getName(), fileBody);
153+
154+
// Add upload_sizes field if present
155+
if (request.getUploadSizes() != null && !request.getUploadSizes().isEmpty()) {
156+
String uploadSizesJson = objectMapper.writeValueAsString(request.getUploadSizes());
157+
builder.addFormDataPart("upload_sizes", uploadSizesJson);
158+
}
159+
160+
// Add user field if present
161+
if (request.getUser() != null) {
162+
String userJson = objectMapper.writeValueAsString(request.getUser());
163+
builder.addFormDataPart("user", userJson);
164+
}
165+
166+
return builder.build();
167+
}
168+
106169
public StreamResponse<T> execute() throws StreamException {
107170
okhttp3.Call call = client.newCall(request);
108171
Response response;

0 commit comments

Comments
 (0)