springmvc web网站开发上传视频到远程服务器解决方案

springmvc web网站开发上传视频到远程服务器解决方案!近期在给学校做官方网站设计时,有一个业务需求是,后台要增加一个视频管理模块,管理员在后台可以把本地硬盘剪辑好的视频文件,上传到远程服务器里,然后在网页前端页面里供访客浏览。

1,先说一下,解决思路。和之前一样,既然是上传多媒体文件,借助于之前在培训班里的学习经验,使用org.springframework.web.multipart.MultipartFile;这个插件,是可以实现该功能,就是速度这块快不快,得看您的网络带宽,和服务器的网络带宽了。当然是带宽越高速度越快了,包括服务器的cpu核心频率,和内存大小。你懂的。

2,下面就是说一下代码的实现,和一些基础的配置参数设置情况。

先贴代码,供大家借鉴。下面是我自己给公司写的上传视频到远程服务器的controller,控制器源码。

package com.web.controller;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.web.bean.Proimage;
import com.web.bean.ResponseResult;
import com.web.util.CreateName;

@Controller
@RequestMapping({ "/uploadvideo" })
public class UploadVideoController {
    /**
     * 上传校区视频接口,
     * @param request
     * @param peitu
     * @return
     */
    @RequestMapping("/uploadXiaoquVideo")
    @ResponseBody
    public ResponseResult<Proimage> uploadXiaoquVideoSrc(HttpServletRequest request,
            @RequestParam("xiaoquvideosrcfile") MultipartFile peitu){
        ResponseResult<Proimage> rr = new ResponseResult<Proimage>();
        try {
                                    
            byte[] bytes = null;
            // www/www/ftpusergrzx/newspeitu/
            //存储在本地硬盘里的所有的视频文件。
            String uploadDir = "d:\\xiaoquvideosource\\";
            String fileRrealName = peitu.getOriginalFilename();
            //使用系统时间戳产生了一个名字。+原始文件的后缀名,组合的一个新的文件名字。
//            long time = System.currentTimeMillis();
//            String t = String.valueOf(time / 1000L);
            //文件的名字,可以使用代码创造的名字。
            String newName = CreateName.getInstance().getNewName();
            String fileName = String.valueOf(newName) + fileRrealName.substring(fileRrealName.lastIndexOf("."));
            String filePath = String.valueOf(uploadDir) + fileName;

            
            // 给后端发布人员看见的显示图片的路径地址。这是一个相对地址。不是物理路径。
            String xianshisrc = "/xiaoquvideosrcurl/" + fileName;
            BufferedOutputStream bos = null;
            FileOutputStream fos = null;
            try {
                bytes = peitu.getBytes();
                File temp = new File(filePath);
                if (!temp.exists())
                    temp.createNewFile();
                fos = new FileOutputStream(temp);
                bos = new BufferedOutputStream(fos);
                bos.write(bytes);
                rr.setState(Integer.valueOf(1));
                rr.setMessage("校区视频上传成功");
                Proimage pi = new Proimage();
                pi.setImgurl(xianshisrc);
                rr.setData(pi);
    
                
                return rr;
            } catch (Exception e) {
                e.printStackTrace();
                rr.setState(Integer.valueOf(0));
                rr.setMessage("请重试");
                return rr;
            } finally {
                if (bos != null)
                    try {
                        bos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        if (fos != null)
                            try {
                                fos.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                    }
            }
        } catch (Exception e) {
            rr.setState(Integer.valueOf(0));
            rr.setMessage("服务器异常请重试");
            return rr;
        }
    }
    
    /**
     * 上传成绩配图接口
     * @param request
     * @param peitu
     * @return
     */
    @RequestMapping("/uploadVideoSrc")
    @ResponseBody
    public ResponseResult<Proimage> uploadVideoSrc(HttpServletRequest request,
            @RequestParam("videosrcfile") MultipartFile peitu) {
        ResponseResult<Proimage> rr = new ResponseResult<Proimage>();
        try {
                                    
            byte[] bytes = null;
            // www/www/ftpusergrzx/newspeitu/
            //存储在本地硬盘里的所有的视频文件。
            String uploadDir = "d:\\videosource\\";
            String fileRrealName = peitu.getOriginalFilename();
            //使用系统时间戳产生了一个名字。+原始文件的后缀名,组合的一个新的文件名字。
//            long time = System.currentTimeMillis();
//            String t = String.valueOf(time / 1000L);
            //文件的名字,可以使用代码创造的名字。
            String newName = CreateName.getInstance().getNewName();
            String fileName = String.valueOf(newName) + fileRrealName.substring(fileRrealName.lastIndexOf("."));
            String filePath = String.valueOf(uploadDir) + fileName;

            
            // 给后端发布人员看见的显示图片的路径地址。这是一个相对地址。不是物理路径。
            String xianshisrc = "/videosrcurl/" + fileName;
            BufferedOutputStream bos = null;
            FileOutputStream fos = null;
            try {
                bytes = peitu.getBytes();
                File temp = new File(filePath);
                if (!temp.exists())
                    temp.createNewFile();
                fos = new FileOutputStream(temp);
                bos = new BufferedOutputStream(fos);
                bos.write(bytes);
                rr.setState(Integer.valueOf(1));
                rr.setMessage("视频上传成功");
                Proimage pi = new Proimage();
                pi.setImgurl(xianshisrc);
                rr.setData(pi);
    
                
                return rr;
            } catch (Exception e) {
                e.printStackTrace();
                rr.setState(Integer.valueOf(0));
                rr.setMessage("请重试");
                return rr;
            } finally {
                if (bos != null)
                    try {
                        bos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        if (fos != null)
                            try {
                                fos.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                    }
            }
        } catch (Exception e) {
            rr.setState(Integer.valueOf(0));
            rr.setMessage("服务器异常请重试");
            return rr;
        }
    }
}

如图,在代码里面,上传后,需要给文件起一个名字,我使用的是:使用系统时间戳产生了一个名字。+原始文件的后缀名,组合的一个新的文件名字。你也可以使用其他的起名方案。

如图,这是上传到服务器后的视频文件名字,格式我使用的都是mp4格式的。

下面发一下,配置的参数情况。

修改spring-mvc.xml配置文件里的参数,最大上传文件的容积,改成你预估的大小即可。我写的是允许上传2G左右的大小的文件。

补充:这个配置参数,会影响整个上传接口!只要你是调用了multipartReslver插件,都会被他影响到的。不仅仅是视频哦,图片,等都是它来管控着的。

末尾说一下,亲测的上传和播放效果。

首先说一下,服务器的配置参数:2核心,4G内存,40G硬盘。带宽峰值1M,

本地提交了1G多的视频,大概使用了1分钟左右,70秒左右,完成了上传操作。还算马马虎虎。如果带宽购买提升一下,速度会更快,实际在前端页面内播放的时候,视频是高清的720p的,播放会出现卡顿,(因为视频需要下载,下载的时候,没有那么快了,就会出现卡顿,)需要等待才能完成下载,下载完成后,播放是流畅的。

没过多久,就花钱提升了带宽,改成了5M带宽,下载速度提升了,但是播放的时候,依然会偶尔卡顿,所以,提醒大家考虑好,到底要不要使用这种web服务器的带宽,做视频播放的架构。

网友们推荐的解决方案是,购买CDN,(中央节点加速器),那种另外算费用了,我没有测试过。

以上内容就是本次为大家分享的,本地上传视频到远程服务器的全部内容。

猜你喜欢

转载自blog.csdn.net/yrldjsbk/article/details/129126416