UploadServiceImpl.java 10.4 KB
Newer Older
1 2
package cn.wisenergy.service.app.impl;

m1991's avatar
m1991 committed
3
import cn.wisenergy.common.utils.*;
4

5
import cn.wisenergy.model.app.shopZx;
6 7 8 9 10 11 12
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
13

14 15 16 17 18 19 20 21
import java.io.IOException;
import java.net.MalformedURLException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import cn.wisenergy.service.app.UploadService;
import java.io.File;
22 23 24 25 26 27
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import cn.wisenergy.mapper.ShopZxMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
28

29 30 31 32 33 34

/**
 * Created by m1991 on 2021/2/24 13:42
 */
@Slf4j
@Transactional
licc's avatar
licc committed
35
@Service
36 37 38 39 40
public class UploadServiceImpl implements UploadService {

    @Autowired
    private ShopZxMapper shopZxMapper;

liqin's avatar
liqin committed
41 42
    @Value("${file.upload.path:#{null}}")
    private String path;
m1991's avatar
m1991 committed
43 44

    /**
45 46 47
     * 视频文件上传
     */
    @Override
48
    public Map<String, Object> uploadVideo(MultipartFile file,HttpServletRequest request,String zxField,String zxAddress,String inviteCode) throws Exception {
49
        Map<String, Object> resultMap=new HashMap<String, Object>();
50 51 52
        /**
         * http://路径
         */
53
        String basePath = request.getScheme() + "://" + request.getServerName()
54
                + ":" + request.getServerPort()+"/upload/";
55 56 57 58 59 60
        Long time = new Date().getTime();

        String fileName = file.getOriginalFilename();//文件原始名称
        String suffixName = fileName.substring(fileName.lastIndexOf("."));//从最后一个.开始截取。截取fileName的后缀名
        String newFileName = time+suffixName; //文件新名称
        //设置文件存储路径,可以存放在你想要指定的路径里面
61
        String rootPath="/opt/upload/video/"; //上传视频存放位置
62 63 64 65 66 67 68

        String filePath = rootPath+newFileName;
        File newFile = new File(filePath);
        //判断目标文件所在目录是否存在
        if(!newFile.getParentFile().exists()){
            //如果目标文件所在的目录不存在,则创建父目录
            newFile.getParentFile().mkdirs();
69 70
        }

71 72 73
        //将内存中的数据写入磁盘
        file.transferTo(newFile);
        //视频上传保存url
74
        String videoUrl = basePath + newFileName;
75 76 77 78 79 80

        //视频封面图处理
        String newImgName = time+".jpg";
        String framefile = rootPath + newImgName;
        String imgUrlSave = basePath+newImgName;//图片最终位置路径
        //视频截取封面图
81
        String imgUrl=FrameGrabberKit.getVedioImg(videoUrl, framefile, imgUrlSave);
82

83
        resultMap.put("videoUrl", videoUrl);
84
        resultMap.put("imgUrl", imgUrl);
85
        resultMap.put("returnCode", 0);
86
        String zxUrl=videoUrl;
87
        //System.out.println("上传的文件名为:"+fileName+",后缀名为:"+newFileName);
88 89 90
        /**
         * 生成当前时间戳
         */
91 92
        Long zxDate= System.currentTimeMillis();
        shopZxMapper.zxadd(zxUrl,zxField,zxAddress,inviteCode, zxDate);
93 94 95
        return resultMap;
    }

96 97 98 99
        /**
         * 图片文件上传
         */
        @Override
100
        public Map<String, Object> uploadImage(MultipartFile file, HttpServletRequest request,String zxField, String zxAddress,String inviteCode) throws Exception {
101 102
            Map<String, Object> resultMap=new HashMap<String, Object>();

103 104 105
            /**
             * 生成当前时间戳
             */
106
            Long zxDate= Long.valueOf(System.currentTimeMillis());
107

108 109 110
            String basePath = request.getScheme() + "://" + request.getServerName()
                    + ":" + request.getServerPort()+"/mimi/upload/images/";

licc's avatar
licc committed
111
            Long time = System.currentTimeMillis();
112 113 114 115 116

            String zxName = file.getOriginalFilename();//文件原始名称
            String suffixName = zxName.substring(zxName.lastIndexOf("."));//从最后一个.开始截取。截取zxName的后缀名
            String newzxName = time+suffixName; //文件新名称
            //设置文件存储路径,可以存放在你想要指定的路径里面
117
            String rootPath="/opt/upload/video/"; //上传图片存放位置
118 119 120 121 122 123 124 125 126 127 128 129

            String filePath = rootPath+newzxName;
            File newFile = new File(filePath);
            //判断目标文件所在目录是否存在
            if(!newFile.getParentFile().exists()){
                //如果目标文件所在的目录不存在,则创建父目录
                newFile.getParentFile().mkdirs();
            }

            //将内存中的数据写入磁盘
            file.transferTo(newFile);
            //图片上传保存url
130
            String zxUrl = basePath + newzxName;
131

132
            resultMap.put("zxUrl", zxUrl);
133
            resultMap.put("returnCode", 0);
134
            shopZxMapper.zxadd(zxUrl,zxField,zxAddress,inviteCode, zxDate);
135 136 137
            return resultMap;
        }

138 139 140
    @Override
    public List imageUpload(MultipartFile[] files, String zxField, String zxAddress,String inviteCode) {

141
        /**
142
         * 生成当前时间戳
143
         */
144
        Long zxDate= Long.valueOf(System.currentTimeMillis());
145 146 147 148 149 150 151
        //获取上传图片数量,打印在控制台
        System.out.println("上传图片数量" + files.length);
        //创建集合
        List<Map<String, Object>> root = new ArrayList<Map<String, Object>>();
        String fileName=null;
        String zxUrl=null;
        // 要上传的目标文件存放的绝对路径
liqin's avatar
liqin committed
152
        final String localPath = path;
153 154 155 156 157 158 159 160 161 162 163
        Map<String, Object> result = new HashMap<String, Object>();//一个文件上传的结果
        String result_msg = "";//上传结果信息
        //遍历图片数据
        for (MultipartFile file : files) {
//            Map<String, Object> result = new HashMap<String, Object>();//一个文件上传的结果

            if (file.isEmpty()) {
                System.out.println("上传图片为空,请重新上传");
            }
            //判断上传文件格式
            String fileType = file.getContentType();
liqin's avatar
liqin committed
164
            if (fileType.equals("image/jpeg") || fileType.equals("image/png")) {
165 166 167 168 169 170 171 172 173 174
                // 要上传的目标文件存放的绝对路径

                //上传后保存的文件名(需要防止图片重名导致的文件覆盖)
                //获取文件名
                fileName = file.getOriginalFilename();
                //获取文件后缀名
                String suffixName = fileName.substring(fileName.lastIndexOf("."));
                //重新生成文件名
                fileName = UUID.randomUUID() + suffixName;

175
                zxUrl+=localPath+fileName+",";
176 177 178 179 180 181
               // shopZxMapper.zxadd(zxUrl,userId,zxName,zxField,imgUrl,zxAddress);
                if (FileUtils.upload(file, localPath, fileName)) {
                    //文件存放的相对路径(一般存放在数据库用于img标签的src)
                    String relativePath = "img/" + fileName;
                    result.put("relativePath", relativePath);//前端根据是否存在该字段来判断上传是否成功
                    result_msg = "图片上传成功";
182
                    result.put("zxUrl", zxUrl);
183 184 185 186 187 188 189 190 191 192 193 194 195 196

                } else {
                    result_msg = "图片上传失败";
                }
            } else {
                result_msg = "图片格式不正确";
            }

        }
        result.put("result_msg", result_msg);
        root.add(result);
        String root_json = JSON.toJSONString(root);
        System.out.println(root_json);
        result.put("returnCode", 0);
197
        shopZxMapper.zxadd(zxUrl,zxField,zxAddress,inviteCode, zxDate);
198 199
        return root;
    }
200

201 202 203 204 205
    /**
     * 多文件上传 TODO
     */
    private Path fileStorageLocation; // 文件在本地存储的地址

liqin's avatar
liqin committed
206
    public UploadServiceImpl() {
liqin's avatar
liqin committed
207 208 209 210 211 212 213
        if (!StringUtil.isBlank(path)) {
            this.fileStorageLocation = Paths.get(path).toAbsolutePath().normalize();
            try {
                Files.createDirectories(this.fileStorageLocation);
            } catch (IOException e) {
                throw new FileException("Could not create the directory", e);
            }
214 215 216 217 218 219 220 221
        }
    }

    /**
     * 存储文件到系统
     * @param file 文件
     * @return 文件名
     */
licc's avatar
licc committed
222
    @Override
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
    public String storeFile(MultipartFile file) {
        // Normalize file name
        String fileName = StringUtils.cleanPath(file.getOriginalFilename());

        try {
            // Check if the file's name contains invalid characters
            if(fileName.contains("..")) {
                throw new FileException("Sorry! Filename contains invalid path sequence " + fileName);
            }

            // Copy file to the target location (Replacing existing file with the same name)
            Path targetLocation = this.fileStorageLocation.resolve(fileName);
            Files.copy(file.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);

            return fileName;
        } catch (IOException ex) {
            throw new FileException("Could not store file " + fileName + ". Please try again!", ex);
        }
    }

licc's avatar
licc committed
243
    @Override
244 245 246 247 248 249 250 251 252 253 254 255 256 257
    public Resource loadFileAsResource(String fileName) {
        try {
            Path filePath = this.fileStorageLocation.resolve(fileName).normalize();
            Resource resource = new UrlResource(filePath.toUri());
            if(resource.exists()) {
                return resource;
            } else {
                throw new FileException("File not found " + fileName);
            }
        } catch (MalformedURLException  ex) {
            throw new FileException("File not found " + fileName, ex);
        }
    }

258
    /**
259
     *  资讯文件展示
260 261
     */
    @Override
262
    public List selectPage(Integer pageNum, Integer pageSize) {
263 264
        List<shopZx> shopZxList = shopZxMapper.selectPage(pageNum,pageSize);
        for (shopZx shopZx : shopZxList) {
265 266
            String zxUrl = shopZx.getZxUrl();
            String[] split = StringUtils.split(zxUrl, ",");
267 268 269
            if (null != split){
                List<String> strings = Arrays.asList(split);
                shopZx.setAskImgList(strings);
270

271
            }
272

273 274
        }
        return shopZxList;
275 276
    }

277
}