package com.example.client.utils;
|
|
import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
|
import com.example.server.progressTrack.model.DjJdgzTrackRecord;
|
import com.example.server.sysOss.model.SysOss;
|
import com.example.server.sysOss.service.OssEncryptService;
|
import com.example.server.sysOss.service.SysOssService;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
|
import javax.swing.*;
|
import javax.swing.table.DefaultTableModel;
|
import java.awt.*;
|
import java.awt.datatransfer.DataFlavor;
|
import java.awt.datatransfer.Transferable;
|
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionListener;
|
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseEvent;
|
import java.io.*;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
@Service
|
public class UploadFile {
|
private File[] selectedFiles;
|
@Autowired
|
private SysOssService sysOssService;
|
@Autowired
|
private OssEncryptService ossEncryptService;
|
private List<SysOss> ossList;
|
private SysOss templet;
|
|
@Value("${zt.oss.local-path}")
|
private String localPath;
|
private static final String key = "zhpt-key#%W";
|
|
public JPanel uploadFile(JFrame frame, Integer width, Integer heigth, SysOss sysOssTemplet) {
|
JPanel jPanel = new JPanel();
|
jPanel.setPreferredSize(new Dimension(width, heigth));
|
|
templet = sysOssTemplet;
|
if (sysOssTemplet.getBusiId() != null) {
|
ossList = sysOssService.getList(sysOssTemplet.getBusiId(), sysOssTemplet.getBusiType());
|
} else {
|
ossList = new ArrayList<>();
|
}
|
|
JTable table = new JTable();
|
table.setRowHeight(10);
|
DefaultTableModel model = new DefaultTableModel();
|
String[] columnIdentifiers = {"文件地址", "操作"};//表头
|
|
JScrollPane scrolltable = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
|
scrolltable.setPreferredSize(new Dimension(width, heigth - 100));
|
scrolltable.setViewportView(table);
|
scrolltable.getViewport().setBackground(Color.WHITE);
|
|
|
JButton browseButton = new JButton("选择文件");
|
jPanel.add(browseButton);
|
jPanel.add(scrolltable);
|
if (ossList != null && ossList.size() > 0) {
|
String[][] data = new String[ossList.size()][2];
|
for (int i = 0; i < ossList.size(); i++) {
|
data[i][0] = ossList.get(i).getName();
|
}
|
|
model.setDataVector(data, columnIdentifiers);
|
table.setModel(model);
|
table.getColumnModel().getColumn(0).setPreferredWidth(width - 120);
|
table.getColumnModel().getColumn(1).setPreferredWidth(120);
|
|
table.getColumnModel().getColumn(0).setCellRenderer(new TableViewRenderer());
|
table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRendererButton());
|
table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditorButton(ossList, sysOssService));
|
|
}
|
|
final boolean[] historyCalled = {false};
|
table.addMouseListener(new MouseAdapter() {
|
@Override
|
public void mouseClicked(MouseEvent e) {
|
if (historyCalled[0]) return;
|
// 获取点击的行和列
|
int row = table.rowAtPoint(e.getPoint());
|
int column = table.columnAtPoint(e.getPoint());
|
|
// 检查是否点击了有效单元格
|
if (row >= 0 && column >= 0) {
|
if (column == 0) { // 列索引从0开始
|
String path = ossList.get(row).getPath();
|
String name = ossList.get(row).getName();
|
File file = new File(localPath + path);
|
InputStream is = null;
|
|
try {
|
is = ossEncryptService.decryptStream(file, ossEncryptService.getKey(key));
|
|
// 创建文件选择器并设置初始文件名
|
JFileChooser fileChooser = new JFileChooser();
|
fileChooser.setSelectedFile(new File(name)); // 设置默认文件名
|
|
int result = fileChooser.showSaveDialog(frame);
|
|
if (result == JFileChooser.APPROVE_OPTION) {
|
File selectedFile = fileChooser.getSelectedFile();
|
|
// 将 InputStream 的内容写入到 selectedFile
|
try (InputStream input = is;
|
OutputStream output = new FileOutputStream(selectedFile)) {
|
|
byte[] buffer = new byte[8192]; // 缓冲区大小
|
int bytesRead;
|
while ((bytesRead = input.read(buffer)) != -1) {
|
output.write(buffer, 0, bytesRead);
|
}
|
|
// 文件保存成功
|
JOptionPane.showMessageDialog(frame, "文件下载成功");
|
} catch (IOException ex) {
|
ex.printStackTrace();
|
JOptionPane.showMessageDialog(frame, "文件保存失败: " + ex.getMessage());
|
}
|
} else {
|
JOptionPane.showMessageDialog(frame, "文件下载取消");
|
}
|
} catch (Exception exception) {
|
exception.printStackTrace();
|
} finally {
|
// 确保 InputStream 被关闭,避免资源泄露
|
if (is != null) {
|
try {
|
is.close();
|
} catch (IOException ec) {
|
ec.printStackTrace();
|
}
|
}
|
}
|
}
|
}
|
}
|
});
|
|
browseButton.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
Boolean flag = true;
|
// 保存当前的外观设置
|
LookAndFeel savedLookAndFeel = UIManager.getLookAndFeel();
|
|
// 设置文件选择器外观
|
try {
|
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
} catch (Exception ex) {
|
ex.printStackTrace();
|
}
|
|
JFileChooser fileChooser = new JFileChooser();
|
|
fileChooser.setDialogTitle("选择文件");
|
fileChooser.setPreferredSize(new Dimension(800, 500));
|
|
|
fileChooser.setMultiSelectionEnabled(true);
|
|
//恢复外观,避免改变所有组件外观
|
try {
|
UIManager.setLookAndFeel(savedLookAndFeel);
|
} catch (UnsupportedLookAndFeelException ed) {
|
ed.printStackTrace();
|
}
|
|
int result = fileChooser.showOpenDialog(frame);
|
if (result == JFileChooser.FILES_ONLY) {
|
selectedFiles = fileChooser.getSelectedFiles();
|
|
Integer oldNum = model.getRowCount();
|
String[][] data = new String[oldNum + selectedFiles.length][2];
|
for (int i = 0; i < oldNum; i++) {
|
data[i][0] = model.getValueAt(i, 0).toString();
|
}
|
for (int i = 0; i < selectedFiles.length; i++) {
|
data[i + oldNum][0] = selectedFiles[i].getPath();
|
String suffix = selectedFiles[i].getName().substring(selectedFiles[i].getName().lastIndexOf("."));
|
SysOss oss = null;
|
try {
|
oss = templet.clone();
|
} catch (CloneNotSupportedException cloneNotSupportedException) {
|
cloneNotSupportedException.printStackTrace();
|
}
|
oss.setBusiType(suffix);
|
oss.setPath(selectedFiles[i].getPath());
|
oss.setName(selectedFiles[i].getName());
|
ossList.add(oss);
|
}
|
|
model.setDataVector(data, columnIdentifiers);
|
table.setModel(model);
|
table.getColumnModel().getColumn(0).setPreferredWidth(width - 120);
|
table.getColumnModel().getColumn(1).setPreferredWidth(120);
|
|
|
table.getColumnModel().getColumn(0).setCellRenderer(new TableViewRenderer());
|
table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRendererButton());
|
table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditorButton(ossList, sysOssService));
|
|
} else {
|
Object[] options = {"OK ", "CANCEL "};
|
JOptionPane.showOptionDialog(null, "选择的文件不正确 ", "提示", JOptionPane.DEFAULT_OPTION,
|
JOptionPane.WARNING_MESSAGE, null, options, options[0]);
|
}
|
}
|
});
|
|
|
scrolltable.setTransferHandler(new TransferHandler() {
|
private static final long serialVersionUID = 1L;
|
|
@Override
|
public boolean importData(JComponent comp, Transferable t) {
|
try {
|
Object o = t.getTransferData(DataFlavor.javaFileListFlavor);
|
String filepath = o.toString();
|
if (filepath.startsWith("[")) {
|
filepath = filepath.substring(1);
|
}
|
if (filepath.endsWith("]")) {
|
filepath = filepath.substring(0, filepath.length() - 1);
|
}
|
String[] filepathArr = filepath.split(", ");
|
Integer oldNum = model.getRowCount();
|
String[][] data = new String[oldNum + filepathArr.length][2];
|
for (int i = 0; i < oldNum; i++) {
|
data[i][0] = model.getValueAt(i, 0).toString();
|
}
|
for (int i = 0; i < filepathArr.length; i++) {
|
data[i + oldNum][0] = filepathArr[i];
|
SysOss oss = null;
|
try {
|
oss = templet.clone();
|
} catch (CloneNotSupportedException cloneNotSupportedException) {
|
cloneNotSupportedException.printStackTrace();
|
}
|
int lastSlashIndex = filepathArr[i].lastIndexOf('/');
|
String fullFileName = "";
|
if (lastSlashIndex != -1) {
|
fullFileName = filepathArr[i].substring(lastSlashIndex + 1);
|
}
|
oss.setPath(filepathArr[i]);
|
oss.setName(fullFileName);
|
ossList.add(oss);
|
}
|
model.setDataVector(data, columnIdentifiers);
|
table.setModel(model);
|
table.getColumnModel().getColumn(0).setPreferredWidth(width - 120);
|
table.getColumnModel().getColumn(1).setPreferredWidth(120);
|
|
table.getColumnModel().getColumn(0).setCellRenderer(new TableViewRenderer());
|
table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRendererButton());
|
table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditorButton(ossList, sysOssService));
|
return true;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return false;
|
}
|
|
@Override
|
public boolean canImport(JComponent comp, DataFlavor[] flavors) {
|
for (int i = 0; i < flavors.length; i++) {
|
if (DataFlavor.javaFileListFlavor.equals(flavors[i])) {
|
return true;
|
}
|
}
|
return false;
|
}
|
});
|
return jPanel;
|
}
|
|
public void save(Long id) {
|
if (ossList != null && ossList.size() > 0) {
|
for (SysOss oss : ossList) {
|
if (oss.getBusiId()==null){
|
oss.setBusiId(id);
|
}
|
if (oss.getId() == null) {
|
sysOssService.upload(oss);
|
}
|
}
|
}
|
}
|
}
|