package com.example.demo;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class DemoController {
@Autowired
private FileDataMapper fileDataMapper;
@Autowired
private AccountDataMapper accountDataMapper;
@RequestMapping("/")
public String index(Model model) {
List list = accountDataMapper.findAll();
int outputMaxLine = 4;
int outputLine = list.size();
int nowOutPutLine = 0;
String fileName = "UserInfo";
long fileCnt = 0;
List fileList = new ArrayList();
FileData fileData = new FileData();
if (outputMaxLine < outputLine) {
fileCnt = outputLine / outputMaxLine;
fileData.setId(1);
fileData.setFileName(fileName);
fileList.add(fileData);
for (int i = 1; i <= fileCnt; i++) {
fileData = new FileData();
fileData.setId(i + 1);
fileData.setFileName(fileName + "_" + i);
fileList.add(fileData);
}
} else {
fileData.setId(1);
fileData.setFileName(fileName);
fileList.add(fileData);
}
model.addAttribute("fileDataList", fileList);
return "list";
}
@RequestMapping("/to_add")
public String to_add() {
return "add";
}
@RequestMapping("/add")
@Transactional(readOnly = false)
public String add(@RequestParam("upload_file") MultipartFile uploadFile, Model model) {
long maxId = fileDataMapper.getMaxId();
FileData fileData = new FileData();
fileData.setId(maxId + 1);
fileData.setFilePath(uploadFile.getOriginalFilename());
try {
fileData.setFileObj(uploadFile.getInputStream());
} catch (Exception e) {
System.err.println(e);
}
fileDataMapper.insert(fileData);
return index(model);
}
@RequestMapping("/download")
public String download(@RequestParam("id") String id,HttpServletResponse response) throws IOException {
List list = accountDataMapper.findAll();
int outputMaxLine = 4;
int outputLine = list.size();
int nowOutPutLine = 0;
String fileName = "UserInfo.csv";
long fileCnt = 0;
String filePath = System.getProperty("java.io.tmpdir");
FileWriter fw = new FileWriter(filePath + fileName, false);
PrintWriter pw = new PrintWriter(new BufferedWriter(fw));
for (int i = 0; i < outputLine; i++) {
if (outputMaxLine < outputLine) {
fileCnt = outputLine / outputMaxLine;
pw.print(list.get(i).getUserId());
pw.print(list.get(i).getUserName());
pw.println();
pw.close();
for (int j = 1; j <= fileCnt; i++) {
fw = new FileWriter(filePath + fileName + j, false);
pw = new PrintWriter(new BufferedWriter(fw));
pw.print(list.get(i).getUserId());
pw.print(list.get(i).getUserName());
pw.println();
pw.close();
}
} else {
pw.print(list.get(i).getUserId());
pw.print(list.get(i).getUserName());
pw.println();
}
}
pw.close();
response.setContentType("application/octet-stream");
response.setHeader("Cache-Control", "private");
response.setHeader("Pragma", "");
response.setHeader("Content-Disposition",
"attachment;filename=\"" + getFileName(filePath + fileName) + "\"");
InputStream in = new FileInputStream(filePath + fileName);
ServletOutputStream out = response.getOutputStream();
int len = 0;
byte[] buf = new byte[1024];
while ((len = in.read(buf)) != -1) {
out.write(buf, 0, len);
}
in.close();
File file = new File(filePath + fileName);
file.delete();
return null;
}
private String getFileName(String filePath) {
String fileName = "";
if (filePath != null && !"".equals(filePath)) {
try {
fileName = URLEncoder.encode(new File(filePath).getName(), "UTF-8");
} catch (Exception e) {
System.err.println(e);
return "";
}
}
return fileName;
}
}