Fastdfs 断点续传
采用追加方式:
1 public String[] uploadBreakpointFile(String group_name, String fileName, NameValuePair[] meta) {
2 String[] results = null;
3 File file = new File(fileName);
4 long originalFileSize = file.length();
5
6 byte[] file_buff;
7
8 //NameValuePair[] vars = new NameValuePair[]{new NameValuePair("fileName", fileName), new NameValuePair("fileSize", String.valueOf(originalFileSize))};
9 int number = (int) (originalFileSize / defaultSize), leftLength;
10 number = originalFileSize % defaultSize == 0 ? number : number + 1;
11 byte[] bytes;
12 try {
13 InputStream input = new FileInputStream(file);
14 file_buff = new byte[input.available()];
15 input.read(file_buff);
16
17 if (originalFileSize > defaultSize) {
18
19 // 如果文件块大,则实现分块上传,需要准备一个空的文件
20
21 for (int i = 0; i < number; i++) {
22 if (originalFileSize - (i) * defaultSize < defaultSize) {
23 leftLength = (int) (originalFileSize - (i) * defaultSize);
24 leftLength = leftLength < 0 ? (int) originalFileSize : leftLength;
25 bytes = new byte[leftLength];
26 if (i == 0) {
27 results = storageClient.upload_appender_file(group_name, bytes, 0, leftLength, FilenameUtils.getExtension(fileName), meta);
28 } else {
29 /*采用追加的方式*/
30 storageClient.append_file(results[0], results[1], bytes, 0, leftLength);
31 }
32 } else {
33 bytes = new byte[(int) defaultSize];
34 leftLength = (int) defaultSize;
35 if (i == 0) {
36 results = storageClient.upload_appender_file(group_name, bytes, 0, leftLength, FilenameUtils.getExtension(fileName), meta);
37 } else {
38 /*采用追加的方式*/
39 storageClient.append_file(results[0], results[1], bytes, 0, leftLength);
40 }
41 }
42 }
43 //写入内容
44 storageClient.modify_file(results[0], results[1], 0, file_buff, 0, file_buff.length);
45 } else {
46 // 如果文件比默认的文件要小,则直接上传
47
48 results = storageClient.upload_file(group_name, file_buff, FilenameUtils.getExtension(fileName), meta);
49
50 }
51 } catch (Exception e) {
52 e.printStackTrace();
53 }
54
55 return results;
56
57 }
浙公网安备 33010602011771号