file类型的input输入框获得value时可使用:
<input type="file" name="videoPath" id="vv"><br>
var formData = new FormData()
formData.append("videoPath",document.getElementById("vv").files[0]);
fileElementId: "vv", //文件选择框的id属性,即<input type="file">的id
上传时首先添加的是视频的ID、标题、内容,存储之后再次调用ajax修改视频的路径和封面的地址。
jsp页面
//上传视频
function addVideo() {
$.ajax({
url: "${path}/video/addVideo",
data: $("#aa").serialize(),
dataType: "json",
success: function (data) {
if (data.add == "SUCCESS") {
alert("文件上传中")
var formData = new FormData()
formData.append("videoPath", document.getElementById("vv").files[0]);
$.ajax({
url: "${path}/video/headUpload?id=" + data.id,
dataType: 'json',
method: 'POST', //提交方式
async: false,//安全协议提交
data: formData,
processData: false, // 数据不做处理
contentType: false, // 不要设置Content-Type请求头内容类型
success: function (data) {
pageInit();
//添加警告添加成功提示
$("#addOneClassOk").show()
//设置隐藏
setTimeout(function () {
$("#addOneClassOk").hide()
$('#myModal').modal('hide')
document.getElementById("aa").reset();
}, 2000)
}
})
}
}
});
}
<form id="aa">
标题:<input type="text" name="title"><br>
描述:<input type="text" name="brief"><br>
视频:<input type="file" name="videoPath" id="vv"><br>
类别:<select id="cat" name="categoryId"></select>
</form>
controller层
@RequestMapping("headUpload")
public Map<String, String> headUpload(MultipartFile videoPath, String id) {
videoService.headUpload(videoPath, id);
Map<String, String> map = new HashMap<>();
map.put("upload", "SUCCESS");
return map;
}
service层
@Override
public void headUpload(MultipartFile videoPath, String id) {
//1.获取文件名
System.out.println("1111111111111111111111111" + videoPath);
String filename = videoPath.getOriginalFilename();
//给文件拼接时间戳
String newName = new Date().getTime() + "-" + filename;
String fileNames = "video/" + newName;
//4.文件上传
AliyunOSSUtil.uploadFileByte(videoPath, "yingx-lrj", fileNames);
//2.截取视频封面
//2.1.拆分字符串
String[] split = newName.split("\\.");
String coverName = split[0];
//2.2.拼接封面名
String coverNames = coverName + ".jpg";
/*2.3.截取视频封面
* 视频截取帧
* 参数:
* bucketName:存储空间名
* fileName:文件名
* */
URL url = AliyunOSSUtil.videoInterceptCover("yingx-lrj", fileNames);
/*
* 3.上传视频封面至阿里云
* 参数:
* netPath:网络路径
* bucketName:存储空间名
* fileName:指定文件名
* */
try {
AliyunOSSUtil.uploadNetFile(url.toString(), "yingx-lrj", "cover/" + coverNames);
} catch (IOException e) {
e.printStackTrace();
}
//拼接视频网络地址
String headNetUrl = "https://yingx-lrj.oss-cn-shanghai.aliyuncs.com/" + fileNames;
//拼接视频封面
//5.数据修改
Video video = videoDao.queryById(id);
video.setCoverPath("https://yingx-lrj.oss-cn-shanghai.aliyuncs.com/cover/" + coverNames);
video.setVideoPath(headNetUrl);
System.out.println(headNetUrl);
videoDao.update(video);
}
AliyunOSSUtil.java 文件
package com.util;
import com.aliyun.oss.HttpMethod;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.PutObjectRequest;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
public class AliyunOSSUtil {
private static String endpoint = "https://oss-cn-shanghai.aliyuncs.com";
private static String accessKeyId = "LTAI4GKk9sRLQBP25dBYBmkE";
private static String accessKeySecret = "M7B1dHqF5leZOYrHfxZVRyfofG9sfp";
/*
* 创建存储空间
* 参数:
* bucketName:存储空间名
* */
public static void insertBucket(String bucketName) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 创建存储空间。
ossClient.createBucket(bucketName);
// 关闭OSSClient。
ossClient.shutdown();
}
/*
* 上传本地文件
* 参数:
* bucketName:存储空间名
* fileName:文件名
* localFile: 本地文件路径
* */
public static void uploadLocalFiles(String bucketName, String fileName, String localFile) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, new File(localFile));
// 上传文件。
ossClient.putObject(putObjectRequest);
// 关闭OSSClient。
ossClient.shutdown();
}
//
/*
* 文件下载到本地
* 参数:
* bucketName:存储空间名
* fileName:文件名
* localFile: 本地文件路径
* */
public static void download(String bucketName, String fileName, String localFile) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
ossClient.getObject(new GetObjectRequest(bucketName, fileName), new File(localFile));
// 关闭OSSClient。
ossClient.shutdown();
}
/*
* 删除文件
* 参数:
* bucketName:存储空间名
* fileName:文件名
* */
public static void deleteFile(String bucketName, String fileName) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
ossClient.deleteObject(bucketName, fileName);
// 关闭OSSClient。
ossClient.shutdown();
}
/*
* 上传字节数组
* 参数:
* headImg:MultipartFile类型的文件
* bucketName:存储空间名
* fileName:文件名
* */
public static void uploadFileByte(MultipartFile headImg, String bucketName, String fileName) {
//转换为字节数组
byte[] bytes = null;
try {
bytes = headImg.getBytes();
} catch (IOException e) {
e.printStackTrace();
}
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传Byte数组。
ossClient.putObject(bucketName, fileName, new ByteArrayInputStream(bytes));
// 关闭OSSClient。
ossClient.shutdown();
}
/*
* 视频截取帧
* 参数:
* bucketName:存储空间名
* fileName:文件名
* */
public static URL videoInterceptCover(String bucketName, String fileName) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 设置视频截帧操作。
String style = "video/snapshot,t_1000,f_jpg,w_800,h_600";
// 指定过期时间为10分钟。
Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10);
GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, fileName, HttpMethod.GET);
req.setExpiration(expiration);
req.setProcess(style);
URL signedUrl = ossClient.generatePresignedUrl(req);
//System.out.println(signedUrl);
// 关闭OSSClient。
ossClient.shutdown();
return signedUrl;
}
/*
* 上传网络流至阿里云
* 参数:
* netPath:网络路径
* bucketName:存储空间名
* fileName:指定文件名
* */
public static void uploadNetFile(String netPath, String bucketName, String fileName) throws IOException {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传网络流。
InputStream inputStream = new URL(netPath).openStream();
ossClient.putObject(bucketName, fileName, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
}
//测试
public static void main(String[] args) {
}
}
版权声明:本文为qq_37287018原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。