java视频上传_Java上传视频实例代码

页面:

上传文件时的关键词:enctype="multipart/form-data"

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

上传视频

文件上传


文件上传

后台:

controller

import javax.servlet.http.HttpServletRequest;

import model.FileEntity;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;

import org.springframework.web.servlet.ModelAndView;

@Controller

@RequestMapping("/uploadflv")

public class UploadController {

@RequestMapping(value = "/upload", method={RequestMethod.POST,RequestMethod.GET})

@ResponseBody

public ModelAndView upload(@RequestParam(value = "file", required = false) MultipartFile multipartFile,

HttpServletRequest request, ModelMap map) {

String message = "";

FileEntity entity = new FileEntity();

FileUploadTool fileUploadTool = new FileUploadTool();

try {

entity = fileUploadTool.createFile(multipartFile, request);

if (entity != null) {

// service.saveFile(entity);

message = "上传成功";

map.put("entity", entity);

map.put("result", message);

} else {

message = "上传失败";

map.put("result", message);

}

} catch (Exception e) {

e.printStackTrace();

}

return new ModelAndView("result", map);

}

}

工具类

import java.io.File;

import java.io.IOException;

import java.sql.Timestamp;

import java.text.DecimalFormat;

import java.util.Arrays;

import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import model.FileEntity;

import org.springframework.web.multipart.MultipartFile;

public class FileUploadTool {

TransfMediaTool transfMediaTool = new TransfMediaTool();

// 文件最大500M

private static long upload_maxsize = 800 * 1024 * 1024;

// 文件允许格式

private static String[] allowFiles = { ".rar", ".doc", ".docx", ".zip",

".pdf", ".txt", ".swf", ".xlsx", ".gif", ".png", ".jpg", ".jpeg",

".bmp", ".xls", ".mp4", ".flv", ".ppt", ".avi", ".mpg", ".wmv",

".3gp", ".mov", ".asf", ".asx", ".vob", ".wmv9", ".rm", ".rmvb" };

// 允许转码的视频格式(ffmpeg)

private static String[] allowFLV = { ".avi", ".mpg", ".wmv", ".3gp",

".mov", ".asf", ".asx", ".vob" };

// 允许的视频转码格式(mencoder)

private static String[] allowAVI = { ".wmv9", ".rm", ".rmvb" };

public FileEntity createFile(MultipartFile multipartFile, HttpServletRequest request) {

FileEntity entity = new FileEntity();

boolean bflag = false;

String fileName = multipartFile.getOriginalFilename().toString();

// 判断文件不为空

if (multipartFile.getSize() != 0 && !multipartFile.isEmpty()) {

bflag = true;

// 判断文件大小

if (multipartFile.getSize() <= upload_maxsize) {

bflag = true;

// 文件类型判断

if (this.checkFileType(fileName)) {

bflag = true;

} else {

bflag = false;

System.out.println("文件类型不允许");

}

} else {

bflag = false;

System.out.println("文件大小超范围");

}

} else {

bflag = false;

System.out.println("文件为空");

}

if (bflag) {

String logoPathDir = "/video/";

String logoRealPathDir = request.getSession().getServletContext().getRealPath(logoPathDir);

// 上传到本地磁盘

// String logoRealPathDir = "E:/upload";

File logoSaveFile = new File(logoRealPathDir);

if (!logoSaveFile.exists()) {

logoSaveFile.mkdirs();

}

String name = fileName.substring(0, fileName.lastIndexOf("."));

System.out.println("文件名称:" + name);

// 新的文件名

String newFileName = this.getName(fileName);

// 文件扩展名

String fileEnd = this.getFileExt(fileName);

// 绝对路径

String fileNamedirs = logoRealPathDir + File.separator + newFileName + fileEnd;

System.out.println("保存的绝对路径:" + fileNamedirs);

File filedirs = new File(fileNamedirs);

// 转入文件

try {

multipartFile.transferTo(filedirs);

} catch (IllegalStateException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

// 相对路径

entity.setType(fileEnd);

String fileDir = logoPathDir + newFileName + fileEnd;

StringBuilder builder = new StringBuilder(fileDir);

String finalFileDir = builder.substring(1);

// size存储为String

String size = this.getSize(filedirs);

// 源文件保存路径

String aviPath = filedirs.getAbsolutePath();

// 转码Avi

// boolean flag = false;

if (this.checkAVIType(fileEnd)) {

// 设置转换为AVI格式后文件的保存路径

String codcAviPath = logoRealPathDir + File.separator + newFileName + ".avi";

// 获取配置的转换工具(mencoder.exe)的存放路径

String mencoderPath = request.getSession().getServletContext().getRealPath("/tools/mencoder.exe");

aviPath = transfMediaTool.processAVI(mencoderPath, filedirs.getAbsolutePath(), codcAviPath);

fileEnd = this.getFileExt(codcAviPath);

}

if (aviPath != null) {

// 转码Flv

if (this.checkMediaType(fileEnd)) {

try {

// 设置转换为flv格式后文件的保存路径

String codcFilePath = logoRealPathDir + File.separator + newFileName + ".flv";

// 获取配置的转换工具(ffmpeg.exe)的存放路径

String ffmpegPath = request.getSession().getServletContext().getRealPath("/tools/ffmpeg.exe");

transfMediaTool.processFLV(ffmpegPath, aviPath, codcFilePath);

fileDir = logoPathDir + newFileName + ".flv";

builder = new StringBuilder(fileDir);

finalFileDir = builder.substring(1);

} catch (Exception e) {

e.printStackTrace();

}

}

entity.setSize(size);

entity.setPath(finalFileDir);

entity.setTitleOrig(name);

entity.setTitleAlter(newFileName);

Timestamp timestamp = new Timestamp(System.currentTimeMillis());

entity.setUploadTime(timestamp);

return entity;

} else {

return null;

}

} else {

return null;

}

}

/**

* 文件类型判断

*

* @param fileName

* @return

*/

private boolean checkFileType(String fileName) {

Iterator type = Arrays.asList(allowFiles).iterator();

while (type.hasNext()) {

String ext = type.next();

if (fileName.toLowerCase().endsWith(ext)) {

return true;

}

}

return false;

}

/**

* 视频类型判断(flv)

*

* @param fileName

* @return

*/

private boolean checkMediaType(String fileEnd) {

Iterator type = Arrays.asList(allowFLV).iterator();

while (type.hasNext()) {

String ext = type.next();

if (fileEnd.equals(ext)) {

return true;

}

}

return false;

}

/**

* 视频类型判断(AVI)

*

* @param fileName

* @return

*/

private boolean checkAVIType(String fileEnd) {

Iterator type = Arrays.asList(allowAVI).iterator();

while (type.hasNext()) {

String ext = type.next();

if (fileEnd.equals(ext)) {

return true;

}

}

return false;

}

/**

* 获取文件扩展名

*

* @return string

*/

private String getFileExt(String fileName) {

return fileName.substring(fileName.lastIndexOf("."));

}

/**

* 依据原始文件名生成新文件名

* @return

*/

private String getName(String fileName) {

Iterator type = Arrays.asList(allowFiles).iterator();

while (type.hasNext()) {

String ext = type.next();

if (fileName.contains(ext)) {

String newFileName = fileName.substring(0, fileName.lastIndexOf(ext));

return newFileName;

}

}

return "";

}

/**

* 文件大小,返回kb.mb

*

* @return

*/

private String getSize(File file) {

String size = "";

long fileLength = file.length();

DecimalFormat df = new DecimalFormat("#.00");

if (fileLength < 1024) {

size = df.format((double) fileLength) + "BT";

} else if (fileLength < 1048576) {

size = df.format((double) fileLength / 1024) + "KB";

} else if (fileLength < 1073741824) {

size = df.format((double) fileLength / 1048576) + "MB";

} else {

size = df.format((double) fileLength / 1073741824) + "GB";

}

return size;

}

}

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.List;

public class TransfMediaTool {

/**

* 视频转码flv

*

* @param ffmpegPath

* 转码工具的存放路径

* @param upFilePath

* 用于指定要转换格式的文件,要截图的视频源文件

* @param codcFilePath

* 格式转换后的的文件保存路径

* @return

* @throws Exception

*/

public void processFLV(String ffmpegPath, String upFilePath, String codcFilePath) {

// 创建一个List集合来保存转换视频文件为flv格式的命令

List convert = new ArrayList();

convert.add(ffmpegPath); // 添加转换工具路径

convert.add("-i"); // 添加参数"-i",该参数指定要转换的文件

convert.add(upFilePath); // 添加要转换格式的视频文件的路径

convert.add("-ab");

convert.add("56");

convert.add("-ar");

convert.add("22050");

convert.add("-q:a");

convert.add("8");

convert.add("-r");

convert.add("15");

convert.add("-s");

convert.add("600*500");

/*

* convert.add("-qscale"); // 指定转换的质量 convert.add("6");

* convert.add("-ab"); // 设置音频码率 convert.add("64"); convert.add("-ac");

* // 设置声道数 convert.add("2"); convert.add("-ar"); // 设置声音的采样频率

* convert.add("22050"); convert.add("-r"); // 设置帧频 convert.add("24");

* convert.add("-y"); // 添加参数"-y",该参数指定将覆盖已存在的文件

*/

convert.add(codcFilePath);

try {

Process videoProcess = new ProcessBuilder(convert).redirectErrorStream(true).start();

new PrintStream(videoProcess.getInputStream()).start();

videoProcess.waitFor();

} catch (IOException e1) {

e1.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

/**

* 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等), 先用mencoder转换为avi(ffmpeg能解析的)格式

*

* @param mencoderPath

* 转码工具的存放路径

* @param upFilePath

* 用于指定要转换格式的文件,要截图的视频源文件

* @param codcFilePath

* 格式转换后的的文件保存路径

* @return

* @throws Exception

*/

public String processAVI(String mencoderPath, String upFilePath, String codcAviPath) {

// boolean flag = false;

List commend = new ArrayList();

commend.add(mencoderPath);

commend.add(upFilePath);

commend.add("-oac");

commend.add("mp3lame");

commend.add("-lameopts");

commend.add("preset=64");

commend.add("-lavcopts");

commend.add("acodec=mp3:abitrate=64");

commend.add("-ovc");

commend.add("xvid");

commend.add("-xvidencopts");

commend.add("bitrate=600");

commend.add("-of");

commend.add("avi");

commend.add("-o");

commend.add(codcAviPath);

try {

// 预处理进程

ProcessBuilder builder = new ProcessBuilder();

builder.command(commend);

builder.redirectErrorStream(true);

// 进程信息输出到控制台

Process p = builder.start();

BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));

String line = null;

while ((line = br.readLine()) != null) {

System.out.println(line);

}

p.waitFor();// 直到上面的命令执行完,才向下执行

return codcAviPath;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

}

class PrintStream extends Thread {

java.io.InputStream __is = null;

public PrintStream(java.io.InputStream is) {

__is = is;

}

public void run() {

try {

while (this != null) {

int _ch = __is.read();

if (_ch != -1)

System.out.print((char) _ch);

else

break;

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

实体类

import java.sql.Timestamp;

public class FileEntity {

private String type;

private String size;

private String path;

private String titleOrig;

private String titleAlter;

private Timestamp uploadTime;

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

public String getSize() {

return size;

}

public void setSize(String size) {

this.size = size;

}

public String getPath() {

return path;

}

public void setPath(String path) {

this.path = path;

}

public String getTitleOrig() {

return titleOrig;

}

public void setTitleOrig(String titleOrig) {

this.titleOrig = titleOrig;

}

public String getTitleAlter() {

return titleAlter;

}

public void setTitleAlter(String titleAlter) {

this.titleAlter = titleAlter;

}

public Timestamp getUploadTime() {

return uploadTime;

}

public void setUploadTime(Timestamp uploadTime) {

this.uploadTime = uploadTime;

}

}

总结

以上所述是小编给大家介绍的Java上传视频实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个Android平台Java语音编写的摄像头实时视频数据保存及FTP上传的示例: 1. 首先,你需要在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> ``` 2. 确认你已添加了相机相关的依赖库,例如: ``` implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'com.android.support:design:28.0.0' implementation 'com.android.support:support-v4:28.0.0' implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.android.support:cardview-v7:28.0.0' implementation 'com.google.android.gms:play-services-vision:19.0.0' implementation 'org.apache.commons:commons-io:1.3.2' ``` 3. 在MainActivity.java文件中,添加以下代码来启动相机并实时保存视频数据: ``` public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 { private CameraBridgeViewBase mOpenCvCameraView; private Mat mRgba; private File mVideoFile; private FileOutputStream mVideoOutputStream; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mOpenCvCameraView = findViewById(R.id.camera_view); mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE); mOpenCvCameraView.setCvCameraViewListener(this); mRgba = new Mat(); // 创建视频文件和输出流 try { File dir = new File(Environment.getExternalStorageDirectory(), "MyApp"); if (!dir.exists()) { dir.mkdirs(); } mVideoFile = new File(dir, "video.mp4"); if (mVideoFile.exists()) { mVideoFile.delete(); } mVideoOutputStream = new FileOutputStream(mVideoFile); } catch (Exception e) { e.printStackTrace(); } } @Override public void onCameraViewStarted(int width, int height) { } @Override public void onCameraViewStopped() { } @Override public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) { mRgba = inputFrame.rgba(); // 写入视频数据到文件 try { Bitmap bitmap = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888); Utils.matToBitmap(mRgba, bitmap); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); byte[] byteArray = stream.toByteArray(); mVideoOutputStream.write(byteArray); stream.close(); } catch (Exception e) { e.printStackTrace(); } return mRgba; } @Override protected void onResume() { super.onResume(); if (OpenCVLoader.initDebug()) { Log.d("MainActivity", "OpenCV loaded successfully"); mOpenCvCameraView.enableView(); } else { Log.d("MainActivity", "OpenCV not loaded"); } } @Override protected void onPause() { super.onPause(); if (mOpenCvCameraView != null) { mOpenCvCameraView.disableView(); } // 关闭视频输出流 try { mVideoOutputStream.flush(); mVideoOutputStream.close(); } catch (Exception e) { e.printStackTrace(); } } @Override protected void onDestroy() { super.onDestroy(); if (mOpenCvCameraView != null) { mOpenCvCameraView.disableView(); } // 删除视频文件 if (mVideoFile != null && mVideoFile.exists()) { mVideoFile.delete(); } } } ``` 4. 添加FTP上传代码,例如: ``` public void uploadFileToFTP() { FTPClient ftpClient = new FTPClient(); try { ftpClient.connect("ftp.example.com"); ftpClient.login("username", "password"); ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); FileInputStream inputStream = new FileInputStream(mVideoFile); ftpClient.storeFile("video.mp4", inputStream); inputStream.close(); ftpClient.logout(); ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); } } ``` 请注意,这只是一个示例代码,你需要根据你的具体需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值