Javaweb文件上传
前段时间推了一篇Javaweb中可以下载文件的方法,不难,当时格式太乱了。(今天在词条又重新发了一次)后来膜拜大佬,学会了一些精妙简单排版,受益受益了。 今天给大家再分享一个上传文件的方法,在百度上搜索真是八仙过海,各显神通。这个也是在前人的基础上,稍加修改,分享给大家。个人挺喜欢的。 文件上传与文件下载作为两个重要模块,也是每个网站、app不可或缺的一部分,日积月累,积少成多。
采用技术: ajax(不必太精,会用就行) 在整体框架SSM上开发(平台无所谓ssh、springboot都一样)
前端:
<script type="text/javascript">
function ajaxFileUpload(id) {
$.ajaxFileUpload({
url : '<%=request.getContextPath()%>/upload/uploadimg.do',
secureuri : false,
fileElementId : id,
dataType : 'json',
success : function(data, status) {
var isok=data.isok;
if(isok==1){
$("#img1").attr("src","<%=request.getContextPath()%>/file/"+data.path);
$("#img").val(data.path);
}
},
error : function(data, status, e) {
alert('上传出错');
}
});
return false;
}
</script>
<body>
<input type="file" id="file" name="file" onchange="ajaxFileUpload('file')"/>
</body>
fileElementId : id 确保为file.
url为请求的后端Controller层路径.
后端:
/*
* 上传图片
* 0代表失败,1代表成功,2格式错误
*/
@Controller
@RequestMapping("/upload")
public class UploadController {
@ResponseBody
@RequestMapping("uploadimg.do")
public Map<String, String> findAllWhere(HttpServletRequest request) throws IOException {
Map<String, String> map=new HashMap<String, String>();
// 转型为MultipartHttpRequest
try {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
List<MultipartFile> fileList = multipartRequest.getFiles("file");
for (MultipartFile mf : fileList) {
if(!mf.isEmpty()){
try {
// 文件保存路径
String dirname=Tool.getyyyyMMdd();
String filePath ="暂时可以写发布后的路径见注释1"+"image/"+dirname+"/";
File file = new File(filePath);
if (!file.exists()) {
file.mkdirs();
}
String filenamelast=getfilenamelast(mf.getOriginalFilename()).toUpperCase();
if(!filenamelast.equals(".JPG")&&!filenamelast.equals(".GIF")&&!filenamelast.equals(".JPEG")&&!filenamelast.equals(".PNG")&&!filenamelast.equals(".SWF")){
map.put("isok", "2");
}else{
filenamelast=Tool.getyyyyMMddHHmmssSSS()+Tool.getRandom()+filenamelast;
map.put("isok", "1");
map.put("path", dirname+"/"+filenamelast);
// 转存文件
mf.transferTo(new File(filePath+filenamelast));
}
} catch (Exception e) {
map.put("isok", "0");
e.printStackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
//获取文件名
private String getfilenamelast(String filename){
int start=filename.lastIndexOf(".");
if(start!=-1){
filename=filename.substring(start, filename.length());
}
return filename;
}
}
这里,并没有对数据库进行操作,我们知道,保存图片在数据库中只是保存里图片的地址! 想操作数据库 只需要一个根据唯一id进行update的操作即可。 发布在tomcat服务器下的图片重启后就被清除了,可以尝试发布在ftp服务器上。自己的电脑即可搭建一个ftp服务器。(关于如何在本地搭建一个ftp服务器,后面继续更新) 每次把图片保存在ftp服务器里面,需要显示图片时从ftp服务器读取即可。 可以看到在Controller里面我们用到了几个工具类,现在把这几个类也贴出来。
Tool类:
public class Tool {
private static Logger log = Logger.getLogger(Tool.class);
//获取日期
public static String getyyyyMMdd(){
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return sdf.format(d);
}
//获取带毫秒时间戳
public static String getyyyyMMddHHmmssSSS(){
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
return sdf.format(d);
}
//获取10000-100000的随机数
public static int getRandom(){
int max=100000;
int min=10000;
Random random = new Random();
int s = random.nextInt(max)%(max-min+1) + min;
return s;
}
}
到此就完全结束了!
注释1:发布路径eclipse中,默认在eclipse的工作空间下;
也可以在server中修改。
这次更新时间有点长,就发现,人如果可以战胜惰性,很多事都可以做成功。伪努力也是最害人的,杜绝娇弱残喘,我行我就杠。 好好学习,好好工作,努力赚取人生第一个100w。