Skip to content

Commit 2557702

Browse files
author
berry_cooper
committed
文件批量上传
1 parent 679834d commit 2557702

File tree

4 files changed

+32
-40
lines changed

4 files changed

+32
-40
lines changed

demo.png

-227 KB
Binary file not shown.

src/main/java/com/berry/http/HttpClient.java

Lines changed: 23 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -167,17 +167,27 @@ public static Response post(String url, byte[] body, StringMap header, String co
167167
}
168168

169169
/**
170-
* 文件上传 文件体为 字节数组
170+
* 批量文件上传
171171
*/
172172
public static Response multipartPost(String url,
173173
StringMap fields,
174174
String name,
175-
String fileName,
176-
byte[] fileBody,
177-
String mimeType,
175+
File[] files,
178176
StringMap headers) {
179-
RequestBody file = RequestBody.create(MediaType.parse(mimeType), fileBody);
180-
return multipartPost(url, fields, name, fileName, file, headers);
177+
final MultipartBody.Builder mb = new MultipartBody.Builder();
178+
for (File file : files) {
179+
RequestBody fileBody = RequestBody.create(MediaType.parse(Constants.MULTIPART_MIME), file);
180+
mb.addFormDataPart(name, file.getName(), fileBody);
181+
}
182+
if (fields != null) {
183+
for (Map.Entry<String, Object> entry : fields.entrySet()) {
184+
mb.addFormDataPart(entry.getKey(), entry.getValue().toString());
185+
}
186+
}
187+
mb.setType(MediaType.get("multipart/form-data"));
188+
RequestBody body = mb.build();
189+
Request.Builder requestBuilder = new Request.Builder().url(url).post(body);
190+
return send(requestBuilder, headers);
181191
}
182192

183193
/**
@@ -188,10 +198,10 @@ public static Response multipartPost(String url,
188198
String name,
189199
String fileName,
190200
File fileBody,
191-
String mimeType,
192201
StringMap headers) {
193-
RequestBody file = RequestBody.create(MediaType.parse(mimeType), fileBody);
194-
return multipartPost(url, fields, name, fileName, file, headers);
202+
RequestBody file = RequestBody.create(MediaType.parse(Constants.MULTIPART_MIME), fileBody);
203+
Request.Builder requestBuilder = getBuilder(url, fields, name, fileName, file);
204+
return send(requestBuilder, headers);
195205
}
196206

197207

@@ -220,10 +230,9 @@ public static void asyncMultipartPost(String url,
220230
String name,
221231
String fileName,
222232
byte[] fileBody,
223-
String mimeType,
224233
StringMap headers,
225234
AsyncCallback cb) {
226-
RequestBody file = RequestBody.create(MediaType.parse(mimeType), fileBody);
235+
RequestBody file = RequestBody.create(MediaType.parse(Constants.MULTIPART_MIME), fileBody);
227236
asyncMultipartPost(url, fields, name, fileName, file, headers, cb);
228237
}
229238

@@ -235,10 +244,9 @@ public static void asyncMultipartPost(String url,
235244
String name,
236245
String fileName,
237246
File fileBody,
238-
String mimeType,
239247
StringMap headers,
240248
AsyncCallback cb) {
241-
RequestBody file = RequestBody.create(MediaType.parse(mimeType), fileBody);
249+
RequestBody file = RequestBody.create(MediaType.parse(Constants.MULTIPART_MIME), fileBody);
242250
asyncMultipartPost(url, fields, name, fileName, file, headers, cb);
243251
}
244252

@@ -280,26 +288,6 @@ private static Response post(String url, RequestBody body, StringMap header) {
280288
return send(requestBuilder, header);
281289
}
282290

283-
/**
284-
* 文件上传
285-
*
286-
* @param url 地址
287-
* @param fields 字段信息 data part
288-
* @param name 文件接受字段名
289-
* @param fileName 文件名 可为空
290-
* @param file 已包装的文件请求体
291-
* @param headers 请求头 可为空
292-
* @return 响应
293-
*/
294-
private static Response multipartPost(String url,
295-
StringMap fields,
296-
String name,
297-
@Nullable String fileName,
298-
RequestBody file,
299-
StringMap headers) {
300-
Request.Builder requestBuilder = getBuilder(url, fields, name, fileName, file);
301-
return send(requestBuilder, headers);
302-
}
303291

304292
/**
305293
* 后去文件上传类型 build
@@ -314,7 +302,6 @@ private static Response multipartPost(String url,
314302
private static Request.Builder getBuilder(String url, StringMap fields, String name, @Nullable String fileName, RequestBody file) {
315303
final MultipartBody.Builder mb = new MultipartBody.Builder();
316304
mb.addFormDataPart(name, fileName, file);
317-
318305
if (fields != null) {
319306
for (Map.Entry<String, Object> entry : fields.entrySet()) {
320307
mb.addFormDataPart(entry.getKey(), entry.getValue().toString());
@@ -344,7 +331,8 @@ private static Response send(final Request.Builder requestBuilder, @Nullable Str
344331
response = CLIENT.newCall(requestBuilder.build()).execute();
345332
if (!response.isSuccessful()) {
346333
int code = response.code();
347-
String msg = response.message();
334+
String resMsg = response.body() != null ? response.body().string() : "";
335+
String msg = response.message() + "," + resMsg;
348336
response.close();
349337
throw new OssException(code, msg);
350338
}

src/main/java/com/berry/storage/ObjectManage.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ public ObjectInfo upload(String bucket, String acl, @Nullable String filePath, S
7474
* @param bucket bucket name
7575
* @param acl 对象acl
7676
* @param filePath 对象存储路径
77-
* @param file 文件
77+
* @param files 文件
7878
*/
79-
public JSONArray upload(String bucket, String acl, @Nullable String filePath, File file) {
79+
public JSONArray upload(String bucket, String acl, @Nullable String filePath, File[] files) {
8080
// 验证acl 规范
8181
if (!Constants.AclType.ALL_NAME.contains(acl)) {
8282
throw new IllegalArgumentException("illegal acl, enum [" + Constants.AclType.ALL_NAME + "]");
@@ -90,7 +90,7 @@ public JSONArray upload(String bucket, String acl, @Nullable String filePath, Fi
9090
String url = String.format("%s%s", config.getAddress(), UrlFactory.ObjectUrl.create.getUrl());
9191

9292
StringMap header = auth.authorization(url);
93-
Response response = HttpClient.multipartPost(url, fields, "file", file.getName(), file, Constants.MULTIPART_MIME, header);
93+
Response response = HttpClient.multipartPost(url, fields, "file", files, header);
9494
Result result = response.jsonToObject(Result.class);
9595
if (result.getCode().equals(Constants.API_SUCCESS_CODE) && result.getMsg().equals(Constants.API_SUCCESS_MSG)) {
9696
return JSON.parseArray(JSON.toJSONString(result.getData()));

src/test/java/com/berry/StorageTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.berry;
22

33
import com.alibaba.fastjson.JSON;
4+
import com.alibaba.fastjson.JSONArray;
45
import com.berry.storage.BucketManage;
56
import com.berry.storage.Config;
67
import com.berry.storage.ObjectManage;
@@ -76,10 +77,13 @@ public void deleteBucketTest() {
7677
*/
7778
@Test
7879
public void createObjectTest() {
79-
File file = new File("./demo.png");
80+
File file = new File("./temp/demo.png");
81+
File file2 = new File("./temp/demo2.png");
8082
if (file.isFile() && file.exists()) {
81-
ObjectInfo vo = objectManage.upload("cooper", "PUBLIC_READ", null, file);
83+
File[] files = {file, file2};
84+
JSONArray vo = objectManage.upload("test", "PUBLIC_READ", null, files);
8285
if (vo != null) {
86+
System.out.println(vo.toJSONString());
8387
System.out.println("上传成功!");
8488
}
8589
} else {

0 commit comments

Comments
 (0)