Spring使用memcached

jopen 9年前發布 | 7K 次閱讀 Java Spring memcached

applicationContext.xml配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans&quot; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quot;
xmlns:p="http://www.springframework.org/schema/p&quot; xmlns:context="http://www.springframework.org/schema/context&quot;
xmlns:aop="http://www.springframework.org/schema/aop&quot; xmlns:mvc="http://www.springframework.org/schema/mvc&quot;
xmlns:tx="http://www.springframework.org/schema/tx&quot;
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"&gt;

          <!-- 讀取項目的資源配置 -->  
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="locations">  
            <list>  
                <value>classpath:jdbc.properties</value>  
                <!-- <value>classpath:mail.properties</value> -->  
                <!-- <value>classpath:memcached.properties</value> -->  
            </list>  
        </property>  
    </bean>  

    <!-- JDBC數據源 -->  
    <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">  
      <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
      <property name="url" value="jdbc:mysql://localhost:3306/springtest" />  
      <property name="username" value="xuan" />  
      <property name="password" value="123456" />  
      <property name="testWhileIdle" value="true" />  
      <property name="testOnBorrow" value="true" />  
      <property name="testOnReturn" value="false" />  
      <property name="validationQuery" value="SELECT 1" />  
      <property name="validationInterval" value="30000" />  
      <property name="timeBetweenEvictionRunsMillis" value="30000" />  
      <property name="maxActive" value="100" />  
      <property name="minIdle" value="2" />  
      <property name="maxWait" value="10000" />  
      <property name="initialSize" value="4" />  
      <property name="removeAbandonedTimeout" value="60" />  
      <property name="removeAbandoned" value="true" />  
      <property name="logAbandoned" value="true" />  
      <property name="minEvictableIdleTimeMillis" value="30000" />  
      <property name="jmxEnabled" value="true" />  
    </bean>  

    <!-- 事務管理器 -->  
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    </bean>  

    <!-- 事務模板 -->  
    <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">  
        <property name="transactionManager" ref="transactionManager" />  
        <property name="timeout" value="10"></property>  
        <property name="isolationLevelName" value="ISOLATION_READ_COMMITTED"></property>  
    </bean>  

    <!-- 配置支持注解方式聲明事務 -->  
    <tx:annotation-driven transaction-manager="transactionManager" />  

</beans>  </pre> 


在Java類文件使用:

    package com.grab.video.controller;

import java.io.BufferedOutputStream;  
import java.io.BufferedReader;  
import java.io.File;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.io.UnsupportedEncodingException;  
import java.net.HttpURLConnection;  
import java.net.MalformedURLException;  
import java.net.URL;  
import java.net.URLEncoder;  
import java.nio.charset.Charset;  
import java.sql.SQLException;  
import java.sql.Timestamp;  
import java.util.ArrayList;  
import java.util.Date;  
import java.util.List;  
import java.util.concurrent.ExecutorService;  
import java.util.concurrent.Executors;  

import javax.servlet.ServletContext;  
import javax.servlet.ServletOutputStream;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.servlet.http.HttpSession;  

import net.spy.memcached.MemcachedClient;  

import org.apache.commons.io.FilenameUtils;  
import org.apache.commons.lang3.StringUtils;  
import org.slf4j.Logger;  
import org.slf4j.LoggerFactory;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.http.HttpHeaders;  
import org.springframework.http.HttpStatus;  
import org.springframework.http.MediaType;  
import org.springframework.http.ResponseEntity;  
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.ServletRequestUtils;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RequestMethod;  
import org.springframework.web.bind.annotation.ResponseBody;  
import org.springframework.web.servlet.ModelAndView;  
import org.springframework.web.servlet.view.RedirectView;  

import com.fasterxml.jackson.core.JsonGenerationException;  
import com.fasterxml.jackson.databind.JsonMappingException;  
import com.fasterxml.jackson.databind.ObjectMapper;  

@Controller  
public class GrabVideoController {  

    private static final Logger LOG = LoggerFactory.getLogger(GrabVideoController.class);  

    private static String filePath="D:\\logs\\video";  
    //private static String filePath = "/home/grabVideo/";  

    @Autowired  
    private MemcachedClient memcachedClient;  

    @Autowired  
    ServletContext context;  

    /** 
     * 輸入userid可以使用 
     *  
     * @param request 
     * @param response 
     * @return 
     */  
    @RequestMapping(value = "/grab/login", method = { RequestMethod.GET })  
    public ModelAndView login(HttpServletRequest request, HttpServletResponse response) {  
        String userId = ServletRequestUtils.getStringParameter(request, "userId", "");  
        String ts = ServletRequestUtils.getStringParameter(request, "ts", "");  
        String sign = ServletRequestUtils.getStringParameter(request, "sign", "");  


        ModelAndView mav = new ModelAndView();  
        // 身份驗證  
        if (StringUtils.isNotBlank(userId)) {  
            String encryptedSign = EncryptionUtils.md5Hex(ts + userId + "grab");  
            if (sign.equals(encryptedSign)) {  
                memcachedClient.set("userId", 5*24*60*60, userId);//緩存為有效時間為5日  
                //HttpSession session = request.getSession();  
                //session.setMaxInactiveInterval(5*24*60*60);//秒為單位,設置session周期為5天  
                //session.setAttribute("userId", userId);// 把userId存放到session  
                String url = "/grab/import";  
                mav.setView(new RedirectView(url));  
                return mav;  
            }  
        }  

        mav.setViewName("video/error");  
        return mav;  
    }  

    /** 
     * 導入文件 
     *  
     * @return 
     */  
    @RequestMapping(value = "/grab/import", method = { RequestMethod.GET })  
    public ModelAndView importFile(HttpServletRequest request, HttpServletResponse response) {  
        // String userId = ServletRequestUtils.getStringParameter(request,  
        // "userId", null);  
        ModelAndView mav = new ModelAndView();  
        //HttpSession session = request.getSession();  

        String userId = null;  
        if (memcachedClient.get("userId") != null) {  
            userId = (String) memcachedClient.get("userId");  
            SqlFileList sqlFileList = new SqlFileList();  
            List<FileListModel> list = new ArrayList<FileListModel>();  
            try {  
                list = sqlFileList.selectDate(userId);  
            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  

            // 從POLYV的API獲取目錄  

            mav.addObject("list", list);  
            mav.addObject("userId", userId);  
            mav.setViewName("video/import");  
            return mav;  
        }  

        mav.setViewName("video/login");  
        return mav;  

    }  

    /** 
     * 刪除文件 
     *  
     * @param request 
     * @param response 
     * @return 
     */  
    @RequestMapping(value = "/grab/delete/file", method = { RequestMethod.GET })  
    public ResponseEntity<AjaxPostResponse> deleteFile(HttpServletRequest request,  
            HttpServletResponse response) {  
        String fileId = ServletRequestUtils.getStringParameter(request, "fileId", null);  

        MediaType mediaType = new MediaType("application", "json", Charset.forName("UTF-8"));  
        HttpHeaders headers = new HttpHeaders();  
        headers.setContentType(mediaType);  

        SqlFileList sqlFileList = new SqlFileList();  
        try {  
            sqlFileList.deleteDate(fileId);  
        } catch (SQLException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  

        AjaxPostResponse resp = new AjaxPostResponse("yes");  
        return new ResponseEntity<AjaxPostResponse>(resp, headers, HttpStatus.OK);  
    }  

    /** 
     * 解析文件 
     *  
     * @return 
     */  
    @RequestMapping(value = "/grab/analysis", method = { RequestMethod.GET })  
    public ResponseEntity<AjaxPostResponse> analysisFile(HttpServletRequest request,  
            HttpServletResponse response) {  
        Integer fileId = ServletRequestUtils.getIntParameter(request, "fileId", 0);  
        String fileUrl = ServletRequestUtils.getStringParameter(request, "fileUrl", "");  
        String classifyId = ServletRequestUtils.getStringParameter(request, "classifyId",  
                "classifyId");  
        String classifyName = ServletRequestUtils.getStringParameter(request, "classifyName", "");  
        String userId = ServletRequestUtils.getStringParameter(request, "userId", null);  

        MediaType mediaType = new MediaType("application", "json", Charset.forName("UTF-8"));  
        HttpHeaders headers = new HttpHeaders();  
        headers.setContentType(mediaType);  

        List<String> urlList = new ArrayList<String>();  
        List<String> titleList = new ArrayList<String>();  
        try {  
            URL url = new URL(fileUrl);  
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();  
            BufferedReader reader = new BufferedReader(new InputStreamReader(  
                    connection.getInputStream(), "GBK"));  

            String line = null;  
            while ((line = reader.readLine()) != null) {  
                String str = line;  
                //  
                String urlstr = str.substring(0, str.indexOf(","));  
                String title = str.substring(str.lastIndexOf(",") + 1, str.length());  
                //  
                urlList.add(urlstr);  
                titleList.add(title);  
            }  

        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            LOG.info("文件解析失敗:" + e);  
            e.printStackTrace();  
            AjaxPostResponse resp = new AjaxPostResponse("no");  
            return new ResponseEntity<AjaxPostResponse>(resp, headers, HttpStatus.OK);  
        }  

        // 更新狀態  
        SqlFileList sqlFileList = new SqlFileList();  
        FileListModel file = new FileListModel();  
        file.setFileId(fileId);  
        file.setStatus("Y");  
        try {  
            sqlFileList.updateDate(file);  
        } catch (SQLException e1) {  
            // TODO Auto-generated catch block  
            LOG.info("文件狀態修改成功:" + e1);  
            e1.printStackTrace();  
        }  

        // LOG.info("00000"+classifyName);  
        classifyName = classifyName.replace("-", "");  
        // LOG.info(classifyName);  

        // 添加數據  
        SqlVideoList sqlvideo = new SqlVideoList();  
        Date date = new Date();  
        Timestamp timeStamp = new Timestamp(date.getTime());  
        GetRandomString randomStr = new GetRandomString();  
        for (int i = 0; i < urlList.size(); i++) {  
            VideoListModel video = new VideoListModel();  
            video.setUserId(userId);  
            video.setUrl(urlList.get(i));// 視頻源地址  
            video.setTitle(titleList.get(i));// 視頻標題  

            String urlstr = urlList.get(i);  
            // String path=urlstr.substring(0, urlstr.indexOf("?"));  
            // String format=path.substring(path.lastIndexOf("."),  
            // path.length());//視頻格式  
            // String baseName = FilenameUtils.getBaseName(urlstr);  
            String extendname = FilenameUtils.getExtension(urlstr);  
            if(extendname.contains("?")){  
                extendname=extendname.substring(0,extendname.indexOf("?"));  
            }  

            if (StringUtils.isBlank(extendname)) {  
                extendname = "mp4";  
            }  
            String trueName = randomStr.generateRandomString(15);  
            String filename = trueName + "." + extendname;  
            video.setTrueName(filename);// 用于下載使用的視頻名稱  

            video.setClassifyId(classifyId);  
            video.setClassifyName(classifyName.trim());  
            video.setStatus(VideoStatus.NO.getValue());// 等待、  
            video.setVid("");  
            video.setCreateTime(timeStamp);  

            try {  
                sqlvideo.insertDate(video);// 添加數據庫  
            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                LOG.info("添加數據庫:" + e);  
                e.printStackTrace();  
                AjaxPostResponse resp = new AjaxPostResponse("no");  
                return new ResponseEntity<AjaxPostResponse>(resp, headers, HttpStatus.OK);  
            }  
        }  

        AjaxPostResponse resp = new AjaxPostResponse("yes");  
        return new ResponseEntity<AjaxPostResponse>(resp, headers, HttpStatus.OK);  
    }  

    /** 
     * 獲取下載進度 
     *  
     * @return 
     */  
    @RequestMapping(value = "/grab/download/progress", method = { RequestMethod.POST,  
            RequestMethod.GET })  
    public ResponseEntity<AjaxPostResponse> getProgress(HttpServletRequest request,  
            HttpServletResponse response) {  
        Integer id = ServletRequestUtils.getIntParameter(request, "videoId", 0);  
        String userId = ServletRequestUtils.getStringParameter(request, "userId", "test");  
        String urlstr = ServletRequestUtils.getStringParameter(request, "url", "");  
        String trueName = ServletRequestUtils.getStringParameter(request, "trueName", "");  

        MediaType mediaType = new MediaType("application", "json", Charset.forName("UTF-8"));  
        HttpHeaders headers = new HttpHeaders();  
        headers.setContentType(mediaType);  

        // LOG.info("--id---"+id+"---u---"+userId);  

        int content = 1;  
        int length = 1;  
        int progress = 1;  

        // LOG.info("-------ccccc4------------"+session.getAttribute("fileSize"+id));  
        if (memcachedClient.get("fileSize" + String.valueOf(id)) == null) {  
            // 文件大小還沒存進session中  
            List<TaskQueue> list = new ArrayList<TaskQueue>();  
            SqlTaskQueue stq = new SqlTaskQueue();  
            try {  
                list = stq.selectDateOne(String.valueOf(id));  
            } catch (SQLException e2) {  
                // TODO Auto-generated catch block  
                LOG.info("查詢文件大小" + e2);  
                e2.printStackTrace();  
            }  

            if (list.size() > 0) {  
                TaskQueue tQueue = list.get(0);  
                content = tQueue.getFileSize();  
                memcachedClient.set("fileSize" + String.valueOf(id),24*60*60, content);// 存進session  
            } else {  
                URL url = null;  
                try {  
                    url = new URL(urlstr);  
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 進行連接握手  
                    connection.setRequestMethod("GET");// 請求方式  
                    content = (int) connection.getContentLength();  
                    memcachedClient.set("fileSize" + String.valueOf(id),24*60*60,content);//memcached  
                    // LOG.info("-------content------"+content);  
                } catch (Exception e1) {  
                    // TODO Auto-generated catch block  
                    LOG.info("鏈接失敗" + e1);  
                    e1.printStackTrace();  
                }  
            }  
        } else {  
            // 文件大少在session中  
            String contentString = String.valueOf(memcachedClient.get("fileSize"  
                    + String.valueOf(id)));  
            // LOG.info("-------ccccc------------"+contentString);  
            content = Integer.parseInt(contentString.trim());  
        }  

        // 文件存儲位置、文件命名處理  
        try {  
            // String path=urlstr.substring(0, urlstr.indexOf("?"));  
            // String name=path.substring(path.lastIndexOf("/")+1,  
            // path.length());  
            // String filename=name.trim();  
            String filename = trueName;  

            File file = new File(filePath, filename);  

            if (!file.exists()) {  
                progress = (Integer) memcachedClient.get(userId + id);// 將當前下載進度存放到session中。  
            } else {  
                length = (int) file.length();  
                progress = length * 100 / content;  
                // 將當前下載進度存放到session中。  
                memcachedClient.set(userId + id,24*60*60,progress);  
                LOG.info(id + "-------progress------" + progress);  
            }  

        } catch (Exception e) {  
            LOG.info("不能解析的路徑:" + e);  
            AjaxPostResponse resp = new AjaxPostResponse(progress);  
            return new ResponseEntity<AjaxPostResponse>(resp, headers, HttpStatus.OK);  
        }  

        AjaxPostResponse resp = new AjaxPostResponse(progress);  
        return new ResponseEntity<AjaxPostResponse>(resp, headers, HttpStatus.OK);  
    }  

    /** 
     * 批量抓取視頻(下載視頻模塊--根據視頻源地址去抓取視頻)管理 
     *  
     * @return 
     * @throws MalformedURLException 
     */  
    @RequestMapping(value = "/grab/download/manage", method = { RequestMethod.POST })  
    public ModelAndView grabDownloadVideo(HttpServletRequest request, HttpServletResponse response) {  
        int[] id = ServletRequestUtils.getIntParameters(request, "videoId");  
        String userId = ServletRequestUtils.getStringParameter(request, "userId", "test");  
        String[] urlstr = ServletRequestUtils.getStringParameters(request, "url");  
        String[] trueName = ServletRequestUtils.getStringParameters(request, "trueName");  

        int len = id.length;  

        List<TaskQueue> taskQueues = new ArrayList<TaskQueue>();  
        for (int i = 0; i < len; i++) {  
            TaskQueue tq = new TaskQueue();  
            tq.setTaskId(String.valueOf(id[i]));  
            tq.setVideoId(id[i]);  
            tq.setUserId(userId);  
            tq.setVideoUrl(urlstr[i]);  
            tq.setTrueName(trueName[i]);  
            taskQueues.add(tq);  
        }  

        SqlTaskQueue stq = new SqlTaskQueue();  
        SqlVideoList svl = new SqlVideoList();  

        // 把任務隊列添加進數據庫  
        if (taskQueues.size() > 0) {  
            // 存在有任務  
            for (int i = 0; i < taskQueues.size(); i++) {  
                TaskQueue task = taskQueues.get(i);  
                List<TaskQueue> taskList = new ArrayList<TaskQueue>();// 查詢任務是否已存在  
                try {  
                    taskList = stq.selectDateOne(task.getTaskId());  
                } catch (SQLException e1) {  
                    // TODO Auto-generated catch block  
                    e1.printStackTrace();  
                }  

                if (taskList.size() > 0) {  
                    // 該任務已存在  
                } else {  
                    task.setFileSize(0);  
                    task.setProgress(0);  
                    task.setStatus("N");  
                    Date date = new Date();  
                    Timestamp timeStamp = new Timestamp(date.getTime());  
                    task.setCreateTime(timeStamp);  
                    try {  
                        stq.insertDate(task);  
                    } catch (SQLException e) {  
                        // TODO Auto-generated catch block  
                        LOG.info("下載任務添加失敗!" + e);  
                        e.printStackTrace();  
                    }  
                }  
            }  
        }  

        // 獲取所有的任務隊列  
        List<TaskQueue> workQueues = new ArrayList<TaskQueue>();  
        try {  
            workQueues = stq.selectDate(userId);  
        } catch (SQLException e) {  
            // TODO Auto-generated catch block  
            LOG.info("獲取下載任務失敗" + e);  
            e.printStackTrace();  
        }  
        // ExecutorService pool = Executors.newFixedThreadPool(3);  
        if (workQueues.size() > 0) {  
            for (int i = 0; i < workQueues.size(); i++) {  
                String taskId = workQueues.get(i).getTaskId();  
                String urltxt = workQueues.get(i).getVideoUrl();  
                String filename = workQueues.get(i).getTrueName();  

                File saveFile = new File(filePath, filename);// 文件保存的位置  
                File fileDir = new File(filePath);  
                if (!fileDir.exists()) {  
                    fileDir.mkdirs();// 目錄不存在創建目錄  
                }  
                URL url = null;  
                try {  
                    url = new URL(workQueues.get(i).getVideoUrl());  
                } catch (MalformedURLException e) {  
                    // TODO Auto-generated catch block  
                    LOG.info("握手失敗" + e);  
                    e.printStackTrace();  
                }  

                if (url != null) {  
                    // 將下載任務線程,放入線程池中執行  
                    ExecutorService executor = (ExecutorService) context  
                            .getAttribute("DOWNLOAD_EXECUTOR");  
                    executor.submit(new DownloadVideo(url, saveFile, taskId));  
                    // pool.execute(new  
                    // DownloadVideo(url,saveFile,taskId));////////////////////////////////////  
                    VideoListModel vlm = new VideoListModel();  
                    vlm.setId(workQueues.get(i).getVideoId());  
                    vlm.setUserId(userId);  
                    vlm.setStatus(VideoStatus.WAIT.getValue());// 將狀態改為等待  
                    try {  
                        svl.updateDate(vlm);  
                    } catch (SQLException e) {  
                        // TODO Auto-generated catch block  
                        LOG.info("更改下載狀態失敗" + e);  
                        e.printStackTrace();  
                    }  

                }  
            }  
        }  
        // 關閉線程池  
        // pool.shutdown();  

        // 重新查詢視頻列表  
        List<VideoListModel> list = new ArrayList<VideoListModel>();  
        try {  
            list = svl.selectDate(userId);  
        } catch (SQLException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        ModelAndView mav = new ModelAndView();  
        mav.addObject("videolist", list);  
        mav.addObject("userId", userId);  
        mav.setViewName("video/download");  
        return mav;  

    }  

    /** 
     * 獲取視頻的下載進度() 
     * @param request 
     */  
    @RequestMapping(value="/grab/download/status",method = {RequestMethod.GET,RequestMethod.POST})  
    public @ResponseBody  
    ResponseEntity<String> downloadStatus(HttpServletRequest request, HttpServletResponse response)  
            throws JsonGenerationException, JsonMappingException, IOException {  
        String userId = null;  
        if (memcachedClient.get("userId") != null) {  
            userId = (String) memcachedClient.get("userId");  
            SqlVideoList sqlVideoList = new SqlVideoList();  
            List<VideoListModel> list = new ArrayList<VideoListModel>();  
            try {  
                list = sqlVideoList.selectDate(userId);  
                for (int i = 0; i < list.size(); i++) {  
                    VideoListModel model = list.get(i);  

                    String filename = model.getTrueName();  
                    File file = new File(filePath, filename);  

                    if (file.exists()) {  

                        int downloaded = (int) file.length();  
                        if (model.getFileSize() != 0) {  
                            System.out.println(model.getId()+"===n==="+model.getTrueName()+"===d==="+downloaded+"===s==="+model.getFileSize()+"===="+(long)downloaded * 100 /(long) model.getFileSize());  
                            model.setPercent((int) ((long)downloaded * 100 /(long) model.getFileSize()));  
                        }   

                    }  

                }  
                ObjectMapper objectMapper = new ObjectMapper();  
                String result = objectMapper.writeValueAsString(list);  

                MediaType mediaType = new MediaType("application", "json", Charset.forName("UTF-8"));  
                HttpHeaders headers = new HttpHeaders();  
                headers.setContentType(mediaType);  
                return new ResponseEntity<String>(result, headers, HttpStatus.OK);  

            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  

        }  
        return null;  

    }  

    @RequestMapping(value = "/grab/download/manage", method = { RequestMethod.GET })  
    public ModelAndView grabVideo(HttpServletRequest request, HttpServletResponse response) {  
        // String userId = ServletRequestUtils.getStringParameter(request,  
        // "userId", "");  
        String userId = null;  

        ModelAndView mav = new ModelAndView();  

        if (memcachedClient.get("userId") != null) {  
            userId = (String) memcachedClient.get("userId");  
            SqlVideoList sqlVideoList = new SqlVideoList();  
            List<VideoListModel> list = new ArrayList<VideoListModel>();  
            try {  
                list = sqlVideoList.selectDate(userId);  
            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
            mav.addObject("videolist", list);  
            mav.addObject("userId", userId);  
            mav.setViewName("video/download");  
            return mav;  
        }  

        mav.setViewName("video/login");  
        return mav;  
    }  

    /** 
     * 導出下載成功的視頻 
     *  
     * @return 
     */  
    @RequestMapping(value = "/grab/export", method = { RequestMethod.GET })  
    public ModelAndView exportVideo(HttpServletRequest request, HttpServletResponse response) {  
        // String userId = ServletRequestUtils.getStringParameter(request,  
        // "userId", "");  
        String userId = null;  
        ModelAndView mav = new ModelAndView();  

        if (memcachedClient.get("userId") != null) {  
            userId = (String) memcachedClient.get("userId");  
            SqlVideoList sqlVideoList = new SqlVideoList();  
            List<VideoListModel> list = new ArrayList<VideoListModel>();  
            try {  
                list = sqlVideoList.selectSuccessDate(userId);  
            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
            mav.addObject("videolist", list);  
            mav.addObject("userId", userId);  
            mav.setViewName("video/export");  
            return mav;  
        }  

        mav.setViewName("video/login");  
        return mav;  
    }  

    /** 
     * export導出文件 
     */  
    @RequestMapping(value = "/grab/export/csv", method = { RequestMethod.GET })  
    public void exportCsv(HttpServletRequest request, HttpServletResponse response) {  
        String userId = ServletRequestUtils.getStringParameter(request, "userId", "");  

        if (StringUtils.isNotBlank(userId)) {  

            SqlVideoList sqlVideoList = new SqlVideoList();  
            List<VideoListModel> list = new ArrayList<VideoListModel>();  
            try {  
                list = sqlVideoList.selectSuccessDate(userId);  
            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  

            // 導出txt文件  
            response.setContentType("text/plain");  
            String fileName = "videolist";  
            try {  
                fileName = URLEncoder.encode("videolist", "UTF-8");  
            } catch (UnsupportedEncodingException e1) {  
                // TODO Auto-generated catch block  
                e1.printStackTrace();  
            }  
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".csv");  
            BufferedOutputStream buff = null;  
            StringBuffer write = new StringBuffer();  
            String enter = "\r\n";  
            ServletOutputStream outSTr = null;  
            try {  
                outSTr = response.getOutputStream(); // 建立  
                buff = new BufferedOutputStream(outSTr);  
                // 把內容寫入文件  
                if (list.size() > 0) {  
                    for (int i = 0; i < list.size(); i++) {  
                        write.append(list.get(i).getUrl());  
                        write.append(",");  
                        write.append(list.get(i).getTitle());  
                        write.append(",");  
                        write.append(list.get(i).getVid());  
                        write.append(enter);  
                    }  
                }  
                buff.write(write.toString().getBytes("UTF-8"));  
                buff.flush();  
                buff.close();  
            } catch (Exception e) {  
                e.printStackTrace();  
            } finally {  
                try {  
                    buff.close();  
                    outSTr.close();  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
        }  

    }  


    /** 
     * 清空導出視頻列表 
     * /grab/export/clean 
     */  
    @RequestMapping(value = "/grab/export/clean", method = { RequestMethod.GET })  
    public ResponseEntity<AjaxPostResponse> cleanVideo(HttpServletRequest request,  
            HttpServletResponse response) {  

        MediaType mediaType = new MediaType("application", "json", Charset.forName("UTF-8"));  
        HttpHeaders headers = new HttpHeaders();  
        headers.setContentType(mediaType);  

        if (memcachedClient.get("userId") != null) {  
            String userId=(String) memcachedClient.get("userId");  
            SqlVideoList sqlVideoList=new SqlVideoList();  
            try {  
                sqlVideoList.cleanDate(userId);  
            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  

            //刪除成功  
            System.out.println("刪除成功!");  
            AjaxPostResponse resp = new AjaxPostResponse("yes");  
            return new ResponseEntity<AjaxPostResponse>(resp, headers, HttpStatus.OK);  
        }else{  
            //刪除失敗  
            System.out.println("刪除失敗!");  
            AjaxPostResponse resp = new AjaxPostResponse("no");  
            return new ResponseEntity<AjaxPostResponse>(resp, headers, HttpStatus.OK);  
        }  

    }  

    /** 
     * 刪除視頻 
     * /grab/export/clean 
     */  
    @RequestMapping(value = "/grab/delete/videoId", method = { RequestMethod.GET })  
    public ResponseEntity<AjaxPostResponse> deleteVideo(HttpServletRequest request,  
            HttpServletResponse response) {  
        String videoId = ServletRequestUtils.getStringParameter(request, "videoId", null);  

        MediaType mediaType = new MediaType("application", "json", Charset.forName("UTF-8"));  
        HttpHeaders headers = new HttpHeaders();  
        headers.setContentType(mediaType);  

        if (StringUtils.isNotBlank(videoId)) {  
            SqlTaskQueue stq=new SqlTaskQueue();  
            SqlVideoList sqlVideoList=new SqlVideoList();  
            try {  
                List<TaskQueue> list=stq.selectDateOne(videoId);  
                if(list.size()>0){  
                    stq.deleteDate(videoId);//刪除任務  
                }  
                sqlVideoList.deleteDate(videoId);//刪除視頻  
            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                System.out.println("刪除失敗"+e);  
                e.printStackTrace();  
            }  

            //刪除成功  
            AjaxPostResponse resp = new AjaxPostResponse("yes");  
            return new ResponseEntity<AjaxPostResponse>(resp, headers, HttpStatus.OK);  
        }else{  
            //刪除失敗  
            AjaxPostResponse resp = new AjaxPostResponse("no");  
            return new ResponseEntity<AjaxPostResponse>(resp, headers, HttpStatus.OK);  
        }  

    }  

}  </pre> 


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!