UploadServiceImpl.java 10.6 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
import java.io.IOException;
15
import java.math.BigInteger;
16 17 18 19 20 21 22 23 24 25
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;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
26 27 28 29 30 31 32
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;
import org.springframework.util.ClassUtils;
33

34 35 36 37 38 39

/**
 * Created by m1991 on 2021/2/24 13:42
 */
@Slf4j
@Transactional
licc's avatar
licc committed
40
@Service
41 42 43 44 45
public class UploadServiceImpl implements UploadService {

    @Autowired
    private ShopZxMapper shopZxMapper;

liqin's avatar
liqin committed
46 47
    @Value("${file.upload.path:#{null}}")
    private String path;
m1991's avatar
m1991 committed
48 49

    /**
50 51 52
     * 视频文件上传
     */
    @Override
53
    public Map<String, Object> uploadVideo(MultipartFile file,HttpServletRequest request,String zxField,String zxAddress,String inviteCode) throws Exception {
54 55
        Map<String, Object> resultMap=new HashMap<String, Object>();

56 57 58 59 60 61 62
        /**
         * 生成当前时间戳
         */
        BigInteger zxDate= BigInteger.valueOf(System.currentTimeMillis());
        /**
         * http://路径
         */
63
        String basePath = request.getScheme() + "://" + request.getServerName()
64
                + ":" + request.getServerPort()+"/upload/video/";
65 66 67 68 69 70 71

        Long time = new Date().getTime();

        String fileName = file.getOriginalFilename();//文件原始名称
        String suffixName = fileName.substring(fileName.lastIndexOf("."));//从最后一个.开始截取。截取fileName的后缀名
        String newFileName = time+suffixName; //文件新名称
        //设置文件存储路径,可以存放在你想要指定的路径里面
72
        String rootPath="/opt/upload/video/"; //上传视频存放位置
73 74 75 76 77 78 79

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

82 83 84
        //将内存中的数据写入磁盘
        file.transferTo(newFile);
        //视频上传保存url
85
        String zxUrl = basePath + newFileName;
86 87 88 89 90 91

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

94
        resultMap.put("zxUrl", zxUrl);
95
        resultMap.put("imgUrl", imgUrl);
96
        resultMap.put("returnCode", 0);
97
        //System.out.println("上传的文件名为:"+fileName+",后缀名为:"+newFileName);
98
        shopZxMapper.zxadd(zxUrl,zxField,zxAddress,inviteCode, String.valueOf(zxDate));
99 100 101
        return resultMap;
    }

102 103 104 105
        /**
         * 图片文件上传
         */
        @Override
106
        public Map<String, Object> uploadImage(MultipartFile file, HttpServletRequest request,String zxField, String zxAddress,String inviteCode) throws Exception {
107 108
            Map<String, Object> resultMap=new HashMap<String, Object>();

109 110 111 112 113
            /**
             * 生成当前时间戳
             */
            BigInteger zxDate= BigInteger.valueOf(System.currentTimeMillis());

114 115 116
            String basePath = request.getScheme() + "://" + request.getServerName()
                    + ":" + request.getServerPort()+"/mimi/upload/images/";

licc's avatar
licc committed
117
            Long time = System.currentTimeMillis();
118 119 120 121 122

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

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

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

138
            resultMap.put("zxUrl", zxUrl);
139
            resultMap.put("returnCode", 0);
140
            shopZxMapper.zxadd(zxUrl,zxField,zxAddress,inviteCode, String.valueOf(zxDate));
141 142 143
            return resultMap;
        }

144 145 146
    @Override
    public List imageUpload(MultipartFile[] files, String zxField, String zxAddress,String inviteCode) {

147
        /**
148
         * 生成当前时间戳
149
         */
150
        BigInteger zxDate= BigInteger.valueOf(System.currentTimeMillis());
151 152 153 154 155 156 157
        //获取上传图片数量,打印在控制台
        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
158
        final String localPath = path;
159 160 161 162 163 164 165 166 167 168 169
        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
170
            if (fileType.equals("image/jpeg") || fileType.equals("image/png")) {
171 172 173 174 175 176 177 178 179 180
                // 要上传的目标文件存放的绝对路径

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

181
                zxUrl+=localPath+fileName+",";
182 183 184 185 186 187
               // 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 = "图片上传成功";
188
                    result.put("zxUrl", zxUrl);
189 190 191 192 193 194 195 196 197 198 199 200 201 202

                } 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);
203
        shopZxMapper.zxadd(zxUrl,zxField,zxAddress,inviteCode, String.valueOf(zxDate));
204 205
        return root;
    }
206

207 208 209 210 211
    /**
     * 多文件上传 TODO
     */
    private Path fileStorageLocation; // 文件在本地存储的地址

liqin's avatar
liqin committed
212
    public UploadServiceImpl() {
liqin's avatar
liqin committed
213 214 215 216 217 218 219
        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);
            }
220 221 222 223 224 225 226 227
        }
    }

    /**
     * 存储文件到系统
     * @param file 文件
     * @return 文件名
     */
licc's avatar
licc committed
228
    @Override
229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
    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
249
    @Override
250 251 252 253 254 255 256 257 258 259 260 261 262 263
    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);
        }
    }

264
    /**
265
     *  资讯文件展示
266 267
     */
    @Override
268
    public List selectPage(Integer pageNum, Integer pageSize) {
269 270
        List<shopZx> shopZxList = shopZxMapper.selectPage(pageNum,pageSize);
        for (shopZx shopZx : shopZxList) {
271 272
            String zxUrl = shopZx.getZxUrl();
            String[] split = StringUtils.split(zxUrl, ",");
273 274 275 276
            if (null != split){
                List<String> strings = Arrays.asList(split);
                shopZx.setAskImgList(strings);
            }
277

278 279
        }
        return shopZxList;
280 281
    }

282
}