java文件上传带进度条的_jsp带进度条的文件上传

2.java 代码 



package com.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class FileUploadController {
Logger log = Logger.getLogger(FileUploadController.class);

/**
 * upload  上传文件
 * @param request
 * @param response
 * @return
 * @throws Exception
 */
@RequestMapping(value = "/upload.html", method = RequestMethod.POST)
public ModelAndView upload(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
	final HttpSession hs = request.getSession();
	ModelAndView mv = new ModelAndView();
	boolean isMultipart = ServletFileUpload.isMultipartContent(request);
	if(!isMultipart){
		return mv;
	}
	// Create a factory for disk-based file items
	FileItemFactory factory = new DiskFileItemFactory();

	// Create a new file upload handler
	ServletFileUpload upload = new ServletFileUpload(factory);
	upload.setProgressListener(new ProgressListener(){
		   public void update(long pBytesRead, long pContentLength, int pItems) {
			   ProcessInfo pri = new ProcessInfo();
		       pri.itemNum = pItems;
		       pri.readSize = pBytesRead;
		       pri.totalSize = pContentLength;
		       pri.show = pBytesRead+"/"+pContentLength+" byte";
		       pri.rate = Math.round(new Float(pBytesRead) / new Float(pContentLength)*100);
		       hs.setAttribute("proInfo", pri);
		   }
		});
	List items = upload.parseRequest(request);
	// Parse the request
	// Process the uploaded items

// Iterator iter = items.iterator();
// while (iter.hasNext()) {
// FileItem item = (FileItem) iter.next();
// if (item.isFormField()) {
// String name = item.getFieldName();
// String value = item.getString();
// System.out.println(“this is common feild!”+name+“=”+value);
// } else {
// System.out.println(“this is file feild!”);
// String fieldName = item.getFieldName();
// String fileName = item.getName();
// String contentType = item.getContentType();
// boolean isInMemory = item.isInMemory();
// long sizeInBytes = item.getSize();
// File uploadedFile = new File(“c://”+fileName);
// item.write(uploadedFile);
// }
// }
return mv;
}

/**
 * process 获取进度
 * @param request
 * @param response
 * @return
 * @throws Exception
 */
@RequestMapping(value = "/process.json", method = RequestMethod.GET)
@ResponseBody
public Object process(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
	return ( ProcessInfo)request.getSession().getAttribute("proInfo");
}

class ProcessInfo{
	public long totalSize = 1;
	public long readSize = 0;
	public String show = "";
	public int itemNum = 0;
	public int rate = 0;
}

}


  

  


  
 


  
 


  
 



## 最后

既已说到spring cloud alibaba,那对于整个微服务架构,如果想要进一步地向上提升自己,到底应该掌握哪些核心技能呢?

就个人而言,对于整个微服务架构,像RPC、Dubbo、Spring Boot、Spring Cloud Alibaba、Docker、kubernetes、Spring Cloud Netflix、Service Mesh等这些都是最最核心的知识,架构师必经之路!下图,是自绘的微服务架构路线体系大纲,如果有还不知道自己该掌握些啥技术的朋友,可根据小编手绘的大纲进行一个参考。

![image](https://img-blog.csdnimg.cn/img_convert/1bfc97e0aba8166d4d16031c3520d7a0.webp?x-oss-process=image/format,png)

如果觉得图片不够清晰,也可来找小编分享原件的xmind文档!

且除此份微服务体系大纲外,我也有整理与其每个专题核心知识点对应的最强学习笔记:

*   出神入化——SpringCloudAlibaba.pdf

*   SpringCloud微服务架构笔记(一).pdf

*   SpringCloud微服务架构笔记(二).pdf

*   SpringCloud微服务架构笔记(三).pdf

*   SpringCloud微服务架构笔记(四).pdf

*   Dubbo框架RPC实现原理.pdf

*   Dubbo最新全面深度解读.pdf

*   Spring Boot学习教程.pdf

*   SpringBoo核心宝典.pdf

*   第一本Docker书-完整版.pdf

*   使用SpringCloud和Docker实战微服务.pdf

*   K8S(kubernetes)学习指南.pdf

![image](https://img-blog.csdnimg.cn/img_convert/d99e1bc6fcba2fbe88734d6e889e1ac2.webp?x-oss-process=image/format,png)

另外,如果不知道从何下手开始学习呢,小编这边也有对每个微服务的核心知识点手绘了其对应的知识架构体系大纲,不过全是导出的xmind文件,全部的源文件也都在此!

![image](https://img-blog.csdnimg.cn/img_convert/24b67fe2c5a094ad2f9b4c39aee473e4.webp?x-oss-process=image/format,png)

   K8S(kubernetes)学习指南.pdf

[外链图片转存中...(img-2X9ti0LI-1714373973015)]

另外,如果不知道从何下手开始学习呢,小编这边也有对每个微服务的核心知识点手绘了其对应的知识架构体系大纲,不过全是导出的xmind文件,全部的源文件也都在此!

[外链图片转存中...(img-5wmm96KY-1714373973015)]

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值