电商项目之springmvc实现文件上传到FTP服务器(超级重点)

1、前端(name的值和接口的@RequestParam的value相同,并且enctype为multipart/form-data)

springmvc文件上传到ftp服务器
<form name="form1" action="/manage/product/upload.do" method="post" enctype="multipart/form-data">
    <input type="file" name="upload_file"/>
    <input type="submit" value="springmvc上传文件"/>
</form>

2、后端接口(controller)

    /**
     * 文件上传到ftp服务器上(在springmvc上配置了文件上传的配置)
     * @param file
     * @param request
     * @return
     */
    @RequestMapping("upload.do")
    @ResponseBody
    public ServerResponse upload(HttpSession session,@RequestParam(value="upload_file",required = false)MultipartFile file, HttpServletRequest request){
        User user= (User) session.getAttribute(Const.CURRENT_USER);
        if(user==null){
            return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"用户未登陆,请登陆管理员");
        }
        if(iUserService.checkAdminRole(user).isSuccess()){//表示是管理员
            //业务逻辑
            //从request里面拿
            String path=request.getSession().getServletContext().getRealPath("upload");
            String targetFileName=iFileService.upload(file,path);

            String url= PropertiesUtil.getProperty("ftp.server.http.prefix")+targetFileName;

            Map fileMap= Maps.newHashMap();
            fileMap.put("uri",targetFileName);
            fileMap.put("url",url);
            return ServerResponse.createBySuccess(fileMap);
        }else {
            return ServerResponse.createByErrorMessage("无权限操作");
        }
    }

3、serviceImpl

package com.lpy.mall.service.Impl;

import com.google.common.collect.Lists;
import com.lpy.mall.service.IFileService;
import com.lpy.mall.util.FTPUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Service("iFileService")
public class FileServiceImpl implements IFileService {

    private Logger logger = LoggerFactory.getLogger(FileServiceImpl.class);
    /**
     * @param file
     * @param path 为上传的一个路径
     * @return
     */
    public String upload(MultipartFile file,String path){

        //1、拿到我们上传文件的文件名
        String fileName=file.getOriginalFilename();
        //2、获取扩展名    abc.jpg    abc.abc.abc.jpg  拿取最后一个.
        String fileExtensionName=fileName.substring(fileName.lastIndexOf(".")+1);
        //3、上传后的文件的文件名
        String uploadFileName= UUID.randomUUID().toString()+"."+fileExtensionName;

        logger.info("开始上传文件,上传文件的文件名:{},上传的路径:{},新文件名:{}",fileName,path,uploadFileName);
        //4、声明目录的file
        File fileDir = new File(path);
        if(!fileDir.exists()){
            fileDir.setWritable(true);//使这文件有写的权限
            fileDir.mkdirs();//创建目录
        }
        //5、声明我们的文件   (路径加我们的新的文件名)
        File targetFile = new File(path,uploadFileName);
        try {
            file.transferTo(targetFile);
            //到这里,文件已经上传成功
            //将targetFile上传到问们的FTP服务器上
            FTPUtil.uploadFile(Lists.<File>newArrayList(targetFile));
            //已经上传到ftp服务器上
            //上传完之后,删除upload下面的文件
            targetFile.delete();
        } catch (IOException e) {
           logger.error("文件上传异常",e);
           return null;
        }
        return targetFile.getName();
    }
}

猜你喜欢

转载自blog.csdn.net/Richard_666/article/details/86003305
今日推荐