程序猿全敏的gravatar头像
程序猿全敏 2017-08-18 22:38:00
java上传文件到本地服务器实例详解

接着昨天的来讲,昨天我们自制了一个简易的本地服务器。其中我的本地服务器tomcat端口号为88。今天我们来接着讲。

我这里用了ssm框架来做,首先你得搭建一个SpringMVC+Spring+mybatis的环境。如果你不会也没关系。可以看看我之前在最代码或者csdn上搭建的例子。

最代码例子的地址为:

http://www.zuidaima.com/share/2978816501746688.htm

csdn例子的地址为:

http://blog.csdn.net/u010798367/article/details/52995905

如果你不想学,那也没关系。其实上传的关键代码就一句:

public String uplodeFile(LearnFile lf,HttpServletRequest request) throws Exception{
		long startTime = System.currentTimeMillis();
		// 将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
		request.getSession().getServletContext());
		// 检查form中是否有enctype="multipart/form-data"
		if (multipartResolver.isMultipart(request)) {
			// 将request变成多部分request
			MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
			// 获取multiRequest 中所有的文件名
			Iterator iter = multiRequest.getFileNames();
			while (iter.hasNext()) {
				// 一次遍历所有文件
				MultipartFile file = multiRequest.getFile(iter.next().toString());
				if (file != null) {
					String path = "D:/fdream/file/" + file.getOriginalFilename();
					// 上传
					file.transferTo(new File(path));
					String fileurl="http://localhost:88/fdream/file"+file.getOriginalFilename();
					LearnFile learnfile = new LearnFile(file.getOriginalFilename(), fileurl, lf.getUplodetime());
					fileService.uplodeFile(learnfile);
				}else{
					System.out.println("上传文件不能为空");
				}

			}

		}
		long endTime = System.currentTimeMillis();
		System.out.println("上传所花时间:" + String.valueOf(endTime - startTime) + "ms");
		return "/index";
	}

我也不知道这个公众号发文章怎么格式化。所以我简易你最好电脑访问。这样可以cp代码仔细看看!

我还是仔细来说明下,毕竟我会完整的实现一个项目,所以细节很重要。

  1. 首先,我在tomcat的server.xml配置文件配置两句话 。以后我就把上传的图片放到本地服务器D盘的fdream文件夹下面的img目录中,文件就放到D盘的fdream文件夹下面的file目录中。详情可以看下昨天的文章。

     

    <Context docBase="D:\fdream\file"  path="/fdream/file" debug="0" reloadable="true"/>   
    <Context docBase="D:\fdream\img"  path="/fdream/img" debug="0" reloadable="true"/> 

2.现在来创建一张数据库表“learnfile”

CREATE TABLE `learnfile` (
  `fileid` int(11) NOT NULL AUTO_INCREMENT COMMENT '文件id',
  `filename` varchar(255) DEFAULT NULL COMMENT '文件名',
  `fileurl` varchar(255) DEFAULT NULL COMMENT '文件上传地址',
  `uplodetime` varchar(255) DEFAULT NULL COMMENT '文件上传时间',
  PRIMARY KEY (`fileid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

3.新建实体

package com.fdream.entity;
/**
 * 文件实体
 * @author quanmin
 *
 */
public class LearnFile {
	//文件id
	private int fileid;
	//文件名
	private String filename;
	//文件上传地址
	private String fileurl;
	//文件上传时间
	private String uplodetime;
	
	public LearnFile() {
		
	}
	
	public LearnFile(int fileid, String filename, String fileurl, String uplodetime) {
		super();
		this.fileid = fileid;
		this.filename = filename;
		this.fileurl = fileurl;
		this.uplodetime = uplodetime;
	}

	public LearnFile(String filename, String fileurl, String uplodetime) {
		this.filename = filename;
		this.fileurl = fileurl;
		this.uplodetime = uplodetime;
	}

	public int getFileid() {
		return fileid;
	}
	public void setFileid(int fileid) {
		this.fileid = fileid;
	}
	public String getFilename() {
		return filename;
	}
	public void setFilename(String filename) {
		this.filename = filename;
	}
	public String getFileurl() {
		return fileurl;
	}
	public void setFileurl(String fileurl) {
		this.fileurl = fileurl;
	}
	public String getUplodetime() {
		return uplodetime;
	}
	public void setUplodetime(String uplodetime) {
		this.uplodetime = uplodetime;
	}
	
}

4.新建FileMapper

package com.fdream.mapper;

import com.fdream.entity.LearnFile;

/**
 * 文件持久层接口
 * @author quanmin
 *
 */
public interface FileMapper {
	/**
	 * 上传文件
	 * @param file
	 * @return
	 * @throws Exception
	 */
	public boolean uplodeFile(LearnFile lf) throws Exception;
}

5.新建FileMapper.xml

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
<mapper namespace="com.fdream.mapper.FileMapper">
	
    <insert id="uplodeFile" parameterType="LearnFile">
		insert into learnfile(filename,fileurl,uplodetime) values(#{filename},#{fileurl},#{uplodetime})
	</insert>

</mapper> 

6.新建IFileService

package com.fdream.service;

import com.fdream.entity.LearnFile;

/**
 * 文件服务层接口
 * @author quanmin
 *
 */
public interface IFileService {

	/**
	 * 上传文件
	 * @param file
	 * @return
	 * @throws Exception
	 */
	public boolean uplodeFile(LearnFile lf) throws Exception;
}

7.新建FileServiceImpl

package com.fdream.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.fdream.entity.LearnFile;
import com.fdream.mapper.FileMapper;
import com.fdream.service.IFileService;
/**
 * 文件服务层接口实现
 * @author quanmin
 *
 */
@Service  
@Transactional  //此处不再进行创建SqlSession和提交事务,都已交由spring去管理了。
public class FileServiceImpl implements IFileService {
	
	@Resource
	private FileMapper fileDao;
	@Override
	public boolean uplodeFile(LearnFile lf) throws Exception {
		return fileDao.uplodeFile(lf);
	}

}

8.新建FileController

package com.fdream.controller;

import java.io.File;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.fdream.entity.LearnFile;
import com.fdream.service.IFileService;

/**
 * 
 * 文件控制层
 * @author quanmin
 *
 */
@Controller
@RequestMapping("/file")
public class FileController {
	@Autowired
	private IFileService fileService;
	
	/**
	 * 上传文件
	 * @param lf
	 * @param request
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/uplodeFile")
	public String uplodeFile(LearnFile lf,HttpServletRequest request) throws Exception{
		long startTime = System.currentTimeMillis();
		// 将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
		request.getSession().getServletContext());
		// 检查form中是否有enctype="multipart/form-data"
		if (multipartResolver.isMultipart(request)) {
			// 将request变成多部分request
			MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
			// 获取multiRequest 中所有的文件名
			Iterator iter = multiRequest.getFileNames();
			while (iter.hasNext()) {
				// 一次遍历所有文件
				MultipartFile file = multiRequest.getFile(iter.next().toString());
				if (file != null) {
					String path = "D:/fdream/file/" + file.getOriginalFilename();
					// 上传
					file.transferTo(new File(path));
					String fileurl="http://localhost:88/fdream/file"+file.getOriginalFilename();
					LearnFile learnfile = new LearnFile(file.getOriginalFilename(), fileurl, lf.getUplodetime());
					fileService.uplodeFile(learnfile);
				}else{
					System.out.println("上传文件不能为空");
				}

			}

		}
		long endTime = System.currentTimeMillis();
		System.out.println("上传所花时间:" + String.valueOf(endTime - startTime) + "ms");
		return "/index";
	}
}

9.这些我就不一一说明了,如果不懂ssm框架的可以先参照那两篇文章。接下来后台代码已经实现了,我写一个jsp页面addFile.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/getnowDate.js"></script>
<base href="<%=basePath%>"/>
</head>
<body onload="a();">
	<form action="<%=basePath%>file/uplodeFile" method="post" enctype="multipart/form-data">
		文件:<input type="file" name="file"/>
		<input name="uplodetime" type="hidden" id="nowDate"/>
		<input type="submit" value="上传"/>
	</form>
</body>
</html>

记住,一定不要忘了加enctype="multipart/form-data"

然后开始访问页面。

java上传文件到本地服务器实例详解

添加成功后跳转到index页面

java上传文件到本地服务器实例详解

现在我们来看看数据库。

java上传文件到本地服务器实例详解

再来看看d盘的fdream文件夹下的file目录

java上传文件到本地服务器实例详解

好的,这个已经成功完成。接下来就是实践一个项目了。也是基于这上面做的。所以大家可以仔细看看最代码和csdn的框架教学。


打赏

已有2人打赏

话不多的程序员的gravatar头像 最代码官方的gravatar头像
最近浏览
R_GYsafdsafafd  LV1 2021年12月3日
王德彪  LV1 2021年11月18日
Mr.Robot  LV1 2021年11月4日
abababa  LV1 2021年7月2日
ydyzzjsl 2021年6月24日
暂无贡献等级
H_L_Y12234  LV5 2021年4月25日
zhouzhiyi  LV5 2021年4月10日
十一呀  LV2 2021年3月31日
暴风之魂  LV1 2021年3月19日
ayixiao112  LV1 2021年3月8日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友