上传 下载 预览

package com.ccid.vehiclemanage.certification.common.service;


import com.ccid.vehiclemanage.certification.common.result.ServerResponse;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;

/**
 * 处理文件上传/预览/下载
 * */
public interface FileService {

    ServerResponse fileUpload(MultipartFile file, String filePath, HttpServletRequest request) throws UnsupportedEncodingException ;

    ServerResponse getFile(String url, HttpServletResponse response) throws Exception ;

    ServerResponse downloadFile(String url, HttpServletResponse response) throws Exception ;

}
package com.ccid.vehiclemanage.certification.common.service.impl;

import com.ccid.vehiclemanage.certification.common.result.ServerResponse;
import com.ccid.vehiclemanage.certification.common.service.FileService;
import com.ccid.vehiclemanage.certification.common.util.DateUtil;
import com.google.common.collect.Maps;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Map;

@Service
public class FileServiceImpl implements FileService {


    /**
     * 多文件上传
     * @param files
     * @param filePath
     * @param request
     * @return data 存放数据为 Map<String, String> 类型,key 是文件名,value 是文件路径加文件名
     * @throws UnsupportedEncodingException
     */
    public ServerResponse fileListUpload(MultipartFile[] files, String filePath, HttpServletRequest request) throws UnsupportedEncodingException {
        Map<String, String> uploadListMap = Maps.newHashMapWithExpectedSize(files.length);

        //循环上传单个文件
        for (MultipartFile file : files){
            ServerResponse serverResponse = fileUpload(file, filePath, request);
            if (serverResponse.isSuccess()){
                uploadListMap.put(file.getOriginalFilename(), (String) serverResponse.getData());
            }else{
                return serverResponse;
            }
        }

        return ServerResponse.createBySuccess("上传成功!" , uploadListMap);
    }

    public ServerResponse fileUpload(MultipartFile file, String filePath, HttpServletRequest request) throws UnsupportedEncodingException {
        request.setCharacterEncoding("UTF-8");
        String fileName = file.getOriginalFilename();
        String timeString = DateUtil.getCurrentTimeString() + "-";
        //与时间戳组合后的最终文件名
        String combinationFileName = timeString + fileName ;
        try {
            uploadFile(file.getBytes(), filePath, combinationFileName);
        }catch (Exception e){
            return ServerResponse.createByErrorMessage("上传失败!");
        }
        return ServerResponse.createBySuccess("上传成功!" , filePath + combinationFileName);
    }

    public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception {
        File targetFile = new File(filePath);
        if (!targetFile.exists()) {
            targetFile.mkdirs();
        }
        FileOutputStream out = new FileOutputStream(filePath + fileName);
        out.write(file);
        out.flush();
        out.close();
    }

    public ServerResponse getFile(String url, HttpServletResponse response) throws Exception{

        response.setCharacterEncoding("utf-8");
        try{
            FileInputStream fis = null;
            File file = new File(url);
            fis = new FileInputStream(file);
            byte[] b = new byte[fis.available()];
            fis.read(b);
            OutputStream out = response.getOutputStream();
            out.write(b);
            out.flush();
        }
        catch (Exception e){
            return ServerResponse.createByErrorMessage("查看文件失败!");
        }

        return ServerResponse.createBySuccessMessage("上传成功!");
    }


    public ServerResponse downloadFile(String url, HttpServletResponse response) throws Exception{
        String fileName = url.substring(url.lastIndexOf("/")+1) ;
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Type","application/octet-stream");
        response.setHeader("Content-Disposition","attachment;filename="+fileName);
        try{
            FileInputStream fis = null;
            File file = new File(url);
            fis = new FileInputStream(file);
            byte[] b = new byte[fis.available()];
            fis.read(b);
            OutputStream out = response.getOutputStream();
            out.write(b);
            out.flush();
        }
        catch (Exception e){
            return ServerResponse.createByErrorMessage("查看文件失败!");
        }
        return ServerResponse.createBySuccessMessage("上传成功!");
    }

}

猜你喜欢

转载自my.oschina.net/u/3566463/blog/1840088
今日推荐