9.实现图片上传

1.首先我们需要在Linux中安装vsftpd,之后对应的会使用ftpclient来进行图片上传。为了实现图片回显,在这个Linux中也要安装Nginx。之后我们引入相关的jar,因为要用到FtpClient,所以我们现在parent项目中的pom中引入相关的jar,然后在到Commons中也引入一下。

<properties>
		
	<ftpclient-version>3.3</ftpclient-version>
</properties>

<dependencies>
	<!-- ftpcilent -->
	<dependency>
		<groupId>commons-net</groupId>
		<artifactId>commons-net</artifactId>
		<version>${ftpclient-version}</version>
	</dependency>
<dependency>
	<groupId>commons-net</groupId>
	<artifactId>commons-net</artifactId>	
</dependency>

 

2.之后在Commons中添加两个工具类,FtpUtil是实现文件上传的相关工具,IDUtil是生成ID的相关工具。我们需要在src/main/resources中新建commons.properties,作用是写明我们上传服务器里面的配置。因为后面ftpUtils中是会用到的,这就避免了硬编码。之后,我们会在manage中用到这个属性文件,那么我们就需要在manage的配置文件中配置属性文件的扫描。

ftpclient.host = 192.168.189.130
ftpclient.port = 21
ftpclient.username = ftpuser
ftpclient.password = ftpuser
ftpclient.basepath = /home/ftpuser
ftpclient.filepath = /
<!-- 扫描 属性文件-->
<context:property-placeholder location="classpath:commons.properties"/>

 

3.接下来我们就需要在manage中添加对应的方法和实现类。我们文件上传是用kindeditor实现的,这个插件要求我们的返回值是一个Map类型,所以我们写出的如下代码(异常我们都丢给控制器处理):

public interface PicService {
	/**
	 * 文件上传
	 * 
	 */
	Map<String, Object> upload(MultipartFile file)throws IOException;
}
@Service
public class PicServiceImpl implements PicService {
	//读取属性文件中的值,赋值给它们
        @Value("${ftpclient.host}")
	private String host;
	@Value("${ftpclient.port}")
	private int port;
	@Value("${ftpclient.username}")
	private String username;
	@Value("${ftpclient.password}")
	private String password;
	@Value("${ftpclient.basepath}")
	private String basePath;
	@Value("${ftpclient.filepath}")
	private String filePath;

	@Override
	public Map<String,Object> upload(MultipartFile file) throws IOException {
		//IDUtils是生成一个图片名,后面的是读取到原来图片名的后缀
                String genImageName = IDUtils.genImageName()+file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
                //调用工具,实现文件上传,返回一个boolean类型
		boolean result = FtpUtil.uploadFile(host, port, username, password, basePath, filePath, genImageName, file.getInputStream());
		Map<String,Object> map = new HashMap<>();
		if(result){
                        //如果文件上传成功,返回true,则执行如下操作,
			map.put("error", 0);
			map.put("url","http://"+ host+"/"+genImageName);
			
		}else{
			map.put("error", 1);
			map.put("message", "图片上传失败");
			
		}
		return map;
	}

}

 

4.然后我们写出对应的控制器代码就可以了。这个里面就要处理异常了。

@Controller
public class PicController {
	@Resource
	private PicService picServiceImpl;
	
	/**
	 * 图片上传
	 * @param uploadFile
	 * @return
	 */
	@RequestMapping("pic/upload")
	@ResponseBody
	public Map<String,Object> upload(MultipartFile uploadFile){
		Map<String,Object> map = null;
		try {
			map= picServiceImpl.upload(uploadFile);
		} catch (IOException e) {
			e.printStackTrace();
			map.put("error", 1);
			map.put("message","上传图片时服务器异常");
		}
		return map;
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值