基于bootstrap-fileinput实现文件上传,下载

一、技术概述

  • 1 这个技术是做什么?

基于bootstrap-fileinput实现文件上传,下载

  • 2 学习该技术的原因?

框架对于前段来说是很重要的一部分。

  • 3 技术的难点在哪里?

如何把前段和后台联系起来。

二、技术详述

具体实现方式

public class ExcelUtil {

public static String getUploadPath(HttpServletRequest request) {
        String appContext = request.getSession().getServletContext()
                        .getRealPath("/");
        String uploadPath = appContext + "upload" + File.separator;
        return uploadPath;
}

public static String getDownloadPath(HttpServletRequest request,String fileName) {
        String appContext = request.getSession().getServletContext()
                        .getRealPath("/");
        StringBuffer pathBuilfer=new StringBuffer();
        pathBuilfer.append(appContext);
        pathBuilfer.append("template");
        pathBuilfer.append(File.separator);
        pathBuilfer.append(fileName);
        return pathBuilfer.toString();
}

public static List<String> getRepeatDataGroup(List<String> list) {
        List<String> result = new ArrayList<>();
        Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
        for (int i = 0; i < list.size(); i++) {
                if (map.containsKey(list.get(i))) {
                        List<Integer> lis = map.get(list.get(i));
                        lis.add(i + 2);
                        map.put(list.get(i), lis);
                } else {
                        List<Integer> lis = new ArrayList<Integer>();
                        lis.add(i + 2);
                        map.put(list.get(i), lis);
                }
        }

        if (map.size() < list.size()) {
                for (Map.Entry<String, List<Integer>> tmp : map.entrySet()) {
                        if (tmp.getValue().size() > 1) {
                                result.add(tmp.getValue().toString());
                        }
                }
        }
        return result;
}

}

CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(

request.getSession().getServletContext());

String uploadPath = "";

// File Upload

if (multipartResolver.isMultipart(request)) {

MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;

Iterator iter = multiRequest.getFileNames();

while (iter.hasNext()) {

MultipartFile file = multiRequest.getFile(iter.next()

.toString());

if (file != null) {

uploadPath = ExcelUtil.getUploadPath(request)

+ file.getOriginalFilename();

try {

file.transferTo(new File(uploadPath));

} catch (Exception e) {

logger.info("Upload Exception ";

tipMsg.append("文件上传失败!");

executeState = false;

}

}

             }
        }

@RequestMapping(params = "method=exportTemplate")

@ResponseBody

public void exportMdmTemplate(HttpServletRequest request,

HttpServletResponse response) {

String fileName = "Template.xlsx";

String path = ExcelUtil.getDownloadPath(request, fileName);

response.setCharacterEncoding("utf-8");

response.setContentType("application/octet-stream");

response.setHeader("Content-Disposition", "attachment;fileName="

+ fileName);

InputStream inputStream = null;

OutputStream os = null;

try {

inputStream = new FileInputStream(new File(path));

os = response.getOutputStream();

byte[] b = new byte[1024];

int length;

while ((length = inputStream.read(b)) > 0) {

os.write(b, 0, length);

}

} catch (Exception e) {

logger.info("Download Template Exception ";

} finally {

try {

os.close();

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

三、技术使用中遇到的问题和解决过程

  • 1 前后端如何交互

前端部分,在前端jsp页面设置form表单,确定需要传递的参数name让用户输入,通过点击按钮后submit()提交到后台;后台对前端请求的反应,接收数据,处理数据以及返回数据。

四、总结

结对第二次作业其实也能运用这个技术实现,不过当时框架也没接触过,看上去很难的样子所以选了别的方法,实际使用过才发现这样做不仅更简单、而且效果也比我之前使用的那种更好。

所以软件开发行业中时刻掌握新技术很重要,即使对于已掌握的更熟悉,但是新的、得到广泛认可的技术真的往往能带来很大的便利。

五、参考文献、参考博客

前后端是如何交互的?正文

web前端新手总结(一):前、后端是如何进行数据交互的?正文