Browse Source

//下载视频

private_deployment
xhxu 1 year ago
parent
commit
6d561502e4
1 changed files with 43 additions and 10 deletions
  1. +43
    -10
      suimangCApi/src/main/java/com/iformall/controller/UserMouldVideoController.java

+ 43
- 10
suimangCApi/src/main/java/com/iformall/controller/UserMouldVideoController.java View File

@@ -24,6 +24,9 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import me.chanjar.weixin.common.error.WxError;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.fs.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -38,6 +41,7 @@ import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.List;
import java.util.UUID;


@RestController
@@ -217,6 +221,7 @@ public class UserMouldVideoController extends BaseController {

response.reset();

File tmpFile = null;
OutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
@@ -240,16 +245,41 @@ public class UserMouldVideoController extends BaseController {
//获取响应的输出流
InputStream inputStream = new URL(mouldVideo.getVideoPlayUrl()).openStream();

response.setHeader("Content-Disposition", "attachment; filename="
+ URLEncoder.encode(mouldVideo.getTitle()+".mp4", "UTF-8"));
//解决编码问题
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Type","application/octet-stream");

byte[] cache = new byte[1024 * 300];
int flag;
while ((flag = inputStream.read(cache))!=-1){
outputStream.write(cache, 0, flag);
//获取从那个字节开始读取文件
String rangeString = request.getHeader("Range");
if(StringUtils.isNotBlank(rangeString)){
tmpFile = FileUtils.createTmpFile(inputStream, mouldVideo.getId().toString(), "mp4");
RandomAccessFile targetFile = new RandomAccessFile(tmpFile, "r");
long fileLength = targetFile.length();
long range = Long.valueOf(rangeString.substring(rangeString.indexOf("=") + 1, rangeString.indexOf("-")));
//设置内容类型
response.setHeader("Content-Type", "video/mp4");
//设置此次相应返回的数据长度
response.setHeader("Content-Length", String.valueOf(fileLength - range));
//设置此次相应返回的数据范围
response.setHeader("Content-Range", "bytes "+range+"-"+(fileLength-1)+"/"+fileLength);
//返回码需要为206,而不是200
response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
//设定文件读取开始位置(以字节为单位)
targetFile.seek(range);

byte[] cache = new byte[1024 * 300];
int flag;
while ((flag = targetFile.read(cache))!=-1){
outputStream.write(cache, 0, flag);
}
}else{
response.setHeader("Content-Disposition", "attachment; filename="
+ URLEncoder.encode(mouldVideo.getId()+".mp4", "UTF-8"));
//解决编码问题
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Type","application/octet-stream");

byte[] cache = new byte[1024 * 300];
int flag;
while ((flag = inputStream.read(cache))!=-1){
outputStream.write(cache, 0, flag);
}
}

}catch(MallinkException e){
@@ -260,6 +290,9 @@ public class UserMouldVideoController extends BaseController {
outputStream.write(JSONObject.toJSONString(resultData).getBytes(StandardCharsets.UTF_8));

}finally {
if (tmpFile != null) {
tmpFile.delete();
}
outputStream.flush();
outputStream.close();
}


Loading…
Cancel
Save