Skip to content
This repository was archived by the owner on Mar 6, 2024. It is now read-only.

Commit b956269

Browse files
committed
修改文件上传方式,添加空间数据统计
1 parent 04d76cc commit b956269

14 files changed

+357
-46
lines changed

LICENSE

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2017 潘滔
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

+16-12
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
**1. 主窗口界面:**
1010

11-
![程序主界面](http://img.blog.csdn.net/20171015221834257?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjY5NTQ3NzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
11+
![程序主界面](http://img.blog.csdn.net/20171019104749116?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjY5NTQ3NzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1212

1313
- 设置文件前缀
1414

@@ -26,7 +26,7 @@
2626

2727
![重置密钥](http://img.blog.csdn.net/20171017123714044?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjY5NTQ3NzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2828

29-
> 说明:出于安全考虑,建议您周期性地更换密钥。[密钥安全使用须知](https://developer.qiniu.com/kodo/kb/1334/the-access-key-secret-key-encryption-key-safe-use-instructions)
29+
> 说明:出于安全考虑,建议您周期性地更换密钥。[查看我的密钥](https://portal.qiniu.com/user/key) [密钥安全使用须知](https://developer.qiniu.com/kodo/kb/1334/the-access-key-secret-key-encryption-key-safe-use-instructions)
3030
3131
- 配置文件
3232

@@ -38,15 +38,15 @@
3838

3939
- 文件上传
4040

41-
除了可上传本地文件外,还可抓取网络文件到空间中,如:
41+
除了可(支持断点和覆盖)上传本地文件外,还可抓取网络文件到空间中,如:
4242

43-
![上传网络文件](http://img.blog.csdn.net/20171017152757227?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjY5NTQ3NzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
43+
![上传网络文件](http://img.blog.csdn.net/20171019105056517?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjY5NTQ3NzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
4444

45-
然后点击开始上传即可
45+
然后点击 `开始上传` 即可
4646

4747
**2. 资源管理界面:**
4848

49-
![资源管理界面](http://img.blog.csdn.net/20171017153112198?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjY5NTQ3NzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
49+
![资源管理界面](http://img.blog.csdn.net/20171019105225191?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjY5NTQ3NzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
5050

5151
- 刷新列表
5252

@@ -74,12 +74,10 @@
7474

7575
- 更新镜像
7676

77-
需要选中文件才能更新,但是这个功能我一直没有测试成功,不知道为什么
77+
此功能首先需要你配置了镜像存储
7878

7979
> 官方解释:对于配置了镜像存储的空间,如果镜像源站更新了文件内容,则默认情况下,七牛不会再主动从客户镜像源站同步新的副本,这个时候就需要利用这个prefetch接口来主动地将空间中的文件和更新后的源站副本进行同步。
8080
81-
或许是我没有配置什么镜像存储吧
82-
8381
- 公有下载
8482

8583
直接下载选中的文件(私有的存储空间不可用)
@@ -104,11 +102,17 @@
104102

105103
从七牛下载指定日期的操作日志
106104

107-
**说明:操作文件时,需要选中文件才能操作(支持多选)。由于下载私有空间的文件需要临时授权,所以文件的下载分为私有下载(生成临时授权然后下载文件)和公有下载(直接下载文件)。**
105+
> 说明:操作文件时,需要选中文件才能操作(支持多选)。由于下载私有空间的文件需要临时授权,所以文件的下载分为私有下载(生成临时授权然后下载文件)和公有下载(直接下载文件)。
106+
107+
**3. 数据统计界面**
108+
109+
![数据统计界面](http://img.blog.csdn.net/20171019105531070?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjY5NTQ3NzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
110+
111+
> 说明:时间范围不超过31天,否则无法获取数据,这是七牛官方规定的。
108112
109-
**3. 其他**
113+
**4. 其他**
110114

111-
- [**下载可执行的jar包**](http://oq3iwfipo.bkt.clouddn.com/tools/zhazhapan/qiniu.jar?v=3 "七牛云——对象存储管理工具jar包下载地址")
115+
- [**下载可执行的jar包**](http://oq3iwfipo.bkt.clouddn.com/tools/zhazhapan/qiniu.jar?v=4 "七牛云——对象存储管理工具jar包下载地址")
112116

113117
- [**历史版本**](https://github.com/zhazhapan/qiniu/releases)
114118

src/main/java/com/zhazhapan/qiniu/FileExecutor.java

+32
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
*/
44
package com.zhazhapan.qiniu;
55

6+
import java.io.BufferedReader;
67
import java.io.BufferedWriter;
78
import java.io.File;
9+
import java.io.FileReader;
810
import java.io.FileWriter;
911
import java.io.IOException;
1012

@@ -34,6 +36,36 @@ public void saveFile(File file, String content) {
3436
saveFile(file, content, false);
3537
}
3638

39+
public String readFile(String path) {
40+
return readFile(new File(path));
41+
}
42+
43+
public String readFile(File file) {
44+
StringBuilder content = new StringBuilder();
45+
String line;
46+
try {
47+
BufferedReader reader = new BufferedReader(new FileReader(file));
48+
while ((line = reader.readLine()) != null) {
49+
content.append(line + "\r\n");
50+
}
51+
reader.close();
52+
} catch (IOException e) {
53+
logger.error("read file error, messages: " + e.getMessage());
54+
}
55+
return content.toString();
56+
}
57+
58+
/**
59+
* 保存日志文件
60+
*/
61+
public void saveLogFile(String logPath, String content) {
62+
File file = new File(logPath);
63+
if (file.exists()) {
64+
content += readFile(file);
65+
}
66+
saveFile(file, content);
67+
}
68+
3769
public void saveFile(File file, String content, boolean append) {
3870
if (Checker.isNotNull(file)) {
3971
try {

src/main/java/com/zhazhapan/qiniu/QiManager.java

+90
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import org.apache.log4j.Logger;
1313

1414
import com.qiniu.cdn.CdnResult;
15+
import com.qiniu.cdn.CdnResult.BandwidthData;
16+
import com.qiniu.cdn.CdnResult.FluxData;
1517
import com.qiniu.cdn.CdnResult.LogData;
1618
import com.qiniu.common.QiniuException;
1719
import com.qiniu.http.Response;
@@ -25,8 +27,11 @@
2527
import com.zhazhapan.qiniu.util.Formatter;
2628
import com.zhazhapan.qiniu.view.Dialogs;
2729

30+
import javafx.application.Platform;
2831
import javafx.collections.FXCollections;
2932
import javafx.collections.ObservableList;
33+
import javafx.scene.chart.XYChart.Data;
34+
import javafx.scene.chart.XYChart.Series;
3035

3136
/**
3237
* @author pantao
@@ -41,6 +46,88 @@ public enum FileAction {
4146
COPY, MOVE
4247
}
4348

49+
/**
50+
* 获取空间带宽统计
51+
*
52+
* @return
53+
*/
54+
public Series<String, Long> getBucketBandwidth(String[] domains, String fromDate, String toDate) {
55+
CdnResult.BandwidthResult bandwidthResult = null;
56+
try {
57+
bandwidthResult = QiniuApplication.cdnManager.getBandwidthData(domains, fromDate, toDate, "day");
58+
} catch (QiniuException e) {
59+
logger.error("get bucket bandwidth error, message: " + e.getMessage());
60+
Platform.runLater(() -> Dialogs.showException(Values.BUCKET_BAND_ERROR, e));
61+
}
62+
Series<String, Long> bandSer = new Series<String, Long>();
63+
bandSer.setName(Values.BUCKET_BANDWIDTH_COUNT);
64+
// 获取带宽统计
65+
if (Checker.isNotNull(bandwidthResult) && Checker.isNotEmpty(bandwidthResult.data)) {
66+
for (Map.Entry<String, BandwidthData> bandwidth : bandwidthResult.data.entrySet()) {
67+
String[] times = bandwidthResult.time;
68+
BandwidthData bandwidthData = bandwidth.getValue();
69+
int i = 0;
70+
for (String time : times) {
71+
long size = 0;
72+
if (Checker.isNotNull(bandwidthData)) {
73+
if (Checker.isNotNull(bandwidthData.china)) {
74+
size += bandwidthData.china[i];
75+
}
76+
if (Checker.isNotNull(bandwidthData.oversea)) {
77+
size += bandwidthData.oversea[i];
78+
}
79+
}
80+
bandSer.getData().add(new Data<String, Long>(time.substring(5, 10), size / Values.KB));
81+
i++;
82+
}
83+
}
84+
} else {
85+
logger.info("bandwidth is empty of this domain");
86+
}
87+
return bandSer;
88+
}
89+
90+
/**
91+
* 获取空间的流量统计
92+
*
93+
* @return
94+
*/
95+
public Series<String, Long> getBucketFlux(String[] domains, String fromDate, String toDate) {
96+
CdnResult.FluxResult fluxResult = null;
97+
try {
98+
fluxResult = QiniuApplication.cdnManager.getFluxData(domains, fromDate, toDate, "day");
99+
} catch (QiniuException e) {
100+
logger.error("get bucket flux error, message: " + e.getMessage());
101+
Platform.runLater(() -> Dialogs.showException(Values.BUCKET_FLUX_ERROR, e));
102+
}
103+
Series<String, Long> fluxSer = new Series<String, Long>();
104+
fluxSer.setName(Values.BUCKET_FLUX_COUNT);
105+
// 获取流量统计
106+
if (Checker.isNotNull(fluxResult) && Checker.isNotEmpty(fluxResult.data)) {
107+
for (Map.Entry<String, FluxData> flux : fluxResult.data.entrySet()) {
108+
String[] times = fluxResult.time;
109+
FluxData fluxData = flux.getValue();
110+
int i = 0;
111+
for (String time : times) {
112+
long size = 0;
113+
if (Checker.isNotNull(fluxData)) {
114+
if (Checker.isNotNull(fluxData.china)) {
115+
size += fluxData.china[i];
116+
}
117+
if (Checker.isNotNull(fluxData.oversea)) {
118+
size += fluxData.oversea[i];
119+
}
120+
}
121+
fluxSer.getData().add(new Data<String, Long>(time.substring(5, 10), size / Values.KB));
122+
i++;
123+
}
124+
}
125+
} else {
126+
logger.info("flux is empty of this domain");
127+
}
128+
return fluxSer;
129+
}
130+
44131
/**
45132
* 日志下载,cdn相关
46133
*/
@@ -248,6 +335,8 @@ public void deleteFiles(ObservableList<FileInfo> fileInfos, String bucket) {
248335
logger.info("delete file '" + file + "' success");
249336
deleteLog += "\tsuccess\t";
250337
QiniuApplication.data.remove(seletecFileInfos.get(i));
338+
QiniuApplication.totalLength--;
339+
QiniuApplication.totalSize -= Formatter.sizeToLong(seletecFileInfos.get(i).getSize());
251340
if (sear) {
252341
currentRes.remove(seletecFileInfos.get(i));
253342
}
@@ -261,6 +350,7 @@ public void deleteFiles(ObservableList<FileInfo> fileInfos, String bucket) {
261350
} catch (QiniuException e) {
262351
Dialogs.showException(Values.DELETE_ERROR, e);
263352
}
353+
MainWindowController.getInstance().setBucketCount();
264354
}
265355
}
266356

src/main/java/com/zhazhapan/qiniu/QiniuApplication.java

-2
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,6 @@ public class QiniuApplication extends Application {
5353

5454
public static UploadManager uploadManager = null;
5555

56-
public static String upToken = null;
57-
5856
public static Configuration configuration = null;
5957

6058
public static BucketManager bucketManager = null;

src/main/java/com/zhazhapan/qiniu/config/ConfigLoader.java

+6-12
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
*/
44
package com.zhazhapan.qiniu.config;
55

6-
import java.io.BufferedReader;
76
import java.io.BufferedWriter;
87
import java.io.File;
9-
import java.io.FileReader;
108
import java.io.FileWriter;
119
import java.io.IOException;
1210
import java.util.Map;
@@ -18,6 +16,7 @@
1816
import com.google.gson.JsonElement;
1917
import com.google.gson.JsonObject;
2018
import com.google.gson.JsonParser;
19+
import com.zhazhapan.qiniu.FileExecutor;
2120
import com.zhazhapan.qiniu.QiniuApplication;
2221
import com.zhazhapan.qiniu.ThreadPool;
2322
import com.zhazhapan.qiniu.controller.MainWindowController;
@@ -151,20 +150,15 @@ public static void writeKey(String accessKey, String secretKey) {
151150
}
152151

153152
public static JsonObject readConfig() {
154-
StringBuilder config = new StringBuilder();
155153
JsonObject jsonObject = null;
156154
try {
157155
logger.info("load configuration into memory");
158-
BufferedReader reader = new BufferedReader(new FileReader(configPath));
159-
String line;
160-
while ((line = reader.readLine()) != null) {
161-
config.append(line);
156+
String content = new FileExecutor().readFile(configPath);
157+
if (Checker.isNullOrEmpty(content)) {
158+
Dialogs.showFatalError(Values.LOAD_CONFIG_ERROR, new IOException("load configuration file error"));
159+
} else {
160+
jsonObject = new JsonParser().parse(content).getAsJsonObject();
162161
}
163-
reader.close();
164-
jsonObject = new JsonParser().parse(config.toString()).getAsJsonObject();
165-
} catch (IOException e) {
166-
logger.error("load configuration error, messages: " + e.getMessage());
167-
Dialogs.showFatalError(Values.LOAD_CONFIG_ERROR, e);
168162
} catch (Exception e) {
169163
logger.error("convert json string to json object failed, app'll reset");
170164
Dialogs.showException(Values.JSON_TO_OBJECT_ERROR, e);

src/main/java/com/zhazhapan/qiniu/config/QiConfig.java

-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ public boolean configUploadEnv(String zone, String bucket) {
6363
QiniuApplication.uploadManager = new UploadManager(configuration);
6464
}
6565
QiniuApplication.configuration = configuration;
66-
QiniuApplication.upToken = QiniuApplication.auth.uploadToken(bucket);
6766
QiniuApplication.bucketManager = new BucketManager(QiniuApplication.auth, configuration);
6867
return true;
6968
}

0 commit comments

Comments
 (0)