上傳 下載 預覽

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("上傳成功!");
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章