Skip to content

Commit c6e2e0f

Browse files
committed
优化文件上传多线程
1 parent 7a77e0b commit c6e2e0f

File tree

6 files changed

+93
-6
lines changed

6 files changed

+93
-6
lines changed

conf/nbs-conf.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ nbs.server.address.host=127.0.0.1
1616
nbs.server.address.api-port=5001
1717
nbs.server.address.gateway-port=8080
1818
nbs.server.exit.stop=false
19-
nbs.server.integrated.enabled=true
19+
nbs.server.integrated.enabled=false
2020

2121
# IP CHECKED
2222
nbs.server.ip.checked-url=http://www.net.cn/static/customercare/yourip.asp

conf/nbs.db

0 Bytes
Binary file not shown.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package io.ipfs.nbs.pined;
2+
3+
/**
4+
* @Package : io.ipfs.nbs.pined
5+
* @Description :
6+
* <p>
7+
* 线程加速器
8+
* </p>
9+
* @Author : lambor.c
10+
* @Date : 2018/7/17-20:18
11+
* Copyright (c) 2018, NBS , lambor.c<[email protected]>.
12+
* All rights reserved.
13+
*/
14+
public class PinedThreadBooster {
15+
16+
17+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package io.nbs.client.exceptions;
2+
3+
/**
4+
* @Package : io.nbs.client.exceptions
5+
* @Description : <p></p>
6+
* @Author : lambor.c
7+
* @Date : 2018/7/17-22:12
8+
* Copyright (c) 2018, NBS , lambor.c<[email protected]>.
9+
* All rights reserved.
10+
*/
11+
public class FileTooLargeException extends Exception {
12+
private static final String MSG = "文件太大,上传失败.";
13+
public FileTooLargeException() {
14+
super(MSG);
15+
}
16+
17+
public FileTooLargeException(String message) {
18+
super(message);
19+
}
20+
21+
public FileTooLargeException(String message, Throwable cause) {
22+
super(message, cause);
23+
}
24+
25+
public FileTooLargeException(Throwable cause) {
26+
super(cause);
27+
}
28+
29+
public FileTooLargeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
30+
super(message, cause, enableSuppression, writableStackTrace);
31+
}
32+
}

src/main/java/io/nbs/client/listener/IPFSFileUploader.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77
import io.ipfs.api.NamedStreamable;
88
import io.nbs.client.Launcher;
99
import io.nbs.client.cnsts.AppGlobalCnst;
10+
import io.nbs.client.exceptions.FileTooLargeException;
1011
import io.nbs.client.services.IpfsMessageSender;
1112
import io.nbs.client.ui.frames.MainFrame;
1213
import io.nbs.client.ui.panels.im.messages.MessagePanel;
14+
import io.nbs.commons.utils.DataSizeFormatUtil;
1315
import io.nbs.commons.utils.UUIDGenerator;
1416
import io.nbs.sdk.beans.MessageItem;
1517
import io.nbs.sdk.beans.PeerInfo;
@@ -19,6 +21,8 @@
1921
import org.slf4j.LoggerFactory;
2022

2123
import java.io.File;
24+
import java.io.FileInputStream;
25+
import java.io.FileNotFoundException;
2226
import java.io.IOException;
2327
import java.net.URLDecoder;
2428
import java.util.List;
@@ -35,6 +39,7 @@ public class IPFSFileUploader {
3539
private static Logger logger = LoggerFactory.getLogger(IPFSFileUploader.class);
3640
private static IPFS ipfs;
3741
private AttachmentInfoService service;
42+
public static int MAX_SIZE = 1000*1024*1024;
3843
private PeerInfo cureent;
3944
private MessagePanel messagePanel;
4045
private List<MessageItem> messageItems;
@@ -56,9 +61,13 @@ public IPFSFileUploader(IPFS ipfs, SqlSession sqlSession,MessagePanel panel,List
5661
*
5762
* @param file
5863
*/
59-
public MerkleNode addFileToIPFS(File file){
64+
public MerkleNode addFileToIPFS(File file) throws FileTooLargeException {
6065
if(!file.exists()||file.isDirectory())return null;
6166
String name = file.getName();
67+
long size = file.length();
68+
if(size>MAX_SIZE){
69+
throw new FileTooLargeException("上传文件【"+name+"】超过"+DataSizeFormatUtil.formatDataSize((long)MAX_SIZE)+"限制.");
70+
}
6271
try {
6372
NamedStreamable.FileWrapper fileWrapper = new NamedStreamable.FileWrapper(file);
6473
List<MerkleNode> list = ipfs.add(fileWrapper,false,false);
@@ -72,6 +81,26 @@ public MerkleNode addFileToIPFS(File file){
7281
}
7382
}
7483

84+
public MerkleNode addByteFileToIPFS(File file) throws FileTooLargeException {
85+
if(!file.exists()||file.isDirectory())return null;
86+
String fname = file.getName();
87+
long size = file.length();
88+
if(size>MAX_SIZE){
89+
throw new FileTooLargeException("上传文件【"+fname+"】超过"+DataSizeFormatUtil.formatDataSize((long)MAX_SIZE)+"限制.");
90+
}
91+
int len = (int)size;
92+
byte[] lagerBytes = new byte[len];
93+
try {
94+
FileInputStream inputStream = new FileInputStream(file);
95+
// NamedStreamable.ByteArrayWrapper byteArrayWrapper = new NamedStreamable.ByteArrayWrapper(inputStream.);
96+
} catch (FileNotFoundException e) {
97+
e.printStackTrace();
98+
}
99+
100+
101+
return null;
102+
}
103+
75104

76105

77106
/**

src/main/java/io/nbs/client/ui/panels/im/IMFileActionListener.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package io.nbs.client.ui.panels.im;
22

3-
import UI.AppMainWindow;
43
import com.nbs.biz.data.entity.AttachmentInfoEntity;
54
import com.nbs.biz.service.AttachmentInfoService;
65
import io.ipfs.api.MerkleNode;
76
import io.nbs.client.Launcher;
7+
import io.nbs.client.exceptions.FileTooLargeException;
88
import io.nbs.client.listener.IPFSFileUploader;
99
import io.nbs.client.ui.frames.MainFrame;
10+
import io.nbs.commons.utils.DataSizeFormatUtil;
1011
import io.nbs.sdk.beans.PeerInfo;
1112
import io.nbs.sdk.prot.IPMParser;
1213
import org.apache.ibatis.session.SqlSession;
@@ -17,7 +18,6 @@
1718
import java.awt.event.ActionEvent;
1819
import java.awt.event.ActionListener;
1920
import java.io.File;
20-
import java.util.List;
2121

2222
/**
2323
* @Package : io.nbs.client.ui.panels.im
@@ -47,9 +47,18 @@ public void actionPerformed(ActionEvent e) {
4747
File selection = jFileChooser.getSelectedFile();
4848
if(selection==null)return;
4949
logger.info(selection.getAbsolutePath());
50-
MerkleNode node = fileUploader.addFileToIPFS(selection);
50+
5151
new Thread(()->{
52-
saveUploadFileInfo2DB(node);
52+
try {
53+
MerkleNode node = fileUploader.addFileToIPFS(selection);
54+
new Thread(()->{
55+
saveUploadFileInfo2DB(node);
56+
}).start();
57+
} catch (FileTooLargeException e1) {
58+
logger.error("删除文件失败,{}-{}",e1.getMessage(),e1.getCause());
59+
JOptionPane.showMessageDialog(MainFrame.getContext(),"文件太大,最大只能上传["+DataSizeFormatUtil.formatDataSize((long)IPFSFileUploader.MAX_SIZE)+"]文件。");
60+
61+
}
5362
}).start();
5463
}
5564

0 commit comments

Comments
 (0)