|
4 | 4 | import com.fasterxml.jackson.core.type.TypeReference; |
5 | 5 | import com.fasterxml.jackson.databind.ObjectMapper; |
6 | 6 | import io.getstream.exceptions.StreamException; |
| 7 | +import io.getstream.models.UploadFileRequest; |
| 8 | +import io.getstream.models.UploadImageRequest; |
7 | 9 | import io.getstream.models.framework.RateLimit; |
8 | 10 | import io.getstream.models.framework.StreamResponse; |
| 11 | +import java.io.File; |
9 | 12 | import java.io.IOException; |
10 | 13 | import java.util.Date; |
11 | 14 | import java.util.List; |
@@ -38,6 +41,10 @@ public StreamRequest( |
38 | 41 | RequestBody rawBody; |
39 | 42 | if (List.of("GET", "DELETE", "HEAD", "OPTIONS").contains(method) || jRequest == null) { |
40 | 43 | rawBody = null; |
| 44 | + } else if (jRequest instanceof UploadFileRequest) { |
| 45 | + rawBody = createMultipartBody((UploadFileRequest) jRequest); |
| 46 | + } else if (jRequest instanceof UploadImageRequest) { |
| 47 | + rawBody = createMultipartBody((UploadImageRequest) jRequest); |
41 | 48 | } else { |
42 | 49 | rawBody = RequestBody.create(objectMapper.writeValueAsBytes(jRequest)); |
43 | 50 | } |
@@ -103,6 +110,62 @@ public HttpUrl buildUrl( |
103 | 110 | return urlBuilder.build(); |
104 | 111 | } |
105 | 112 |
|
| 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 | + |
106 | 169 | public StreamResponse<T> execute() throws StreamException { |
107 | 170 | okhttp3.Call call = client.newCall(request); |
108 | 171 | Response response; |
|
0 commit comments