package com.qianwen.core.boot.ctrl;
|
|
import java.io.File;
|
import java.io.IOException;
|
import java.util.List;
|
import javax.servlet.http.HttpServletRequest;
|
import com.qianwen.core.boot.file.BladeFileUtil;
|
import com.qianwen.core.boot.file.LocalFile;
|
import com.qianwen.core.secure.BladeUser;
|
import com.qianwen.core.secure.utils.AuthUtil;
|
import com.qianwen.core.tool.api.R;
|
import com.qianwen.core.tool.utils.Charsets;
|
import com.qianwen.core.tool.utils.WebUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.core.io.FileSystemResource;
|
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.support.ResourceRegion;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpStatus;
|
import org.springframework.http.MediaType;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.util.UriUtils;
|
|
/* loaded from: blade-core-boot-9.3.0.0-SNAPSHOT.jar:org/springblade/core/boot/ctrl/BladeController.class */
|
public class BladeController {
|
@Autowired
|
private HttpServletRequest request;
|
|
public HttpServletRequest getRequest() {
|
return this.request;
|
}
|
|
public BladeUser getUser() {
|
return AuthUtil.getUser();
|
}
|
|
public <T> R<T> data(T data) {
|
return R.data(data);
|
}
|
|
public <T> R<T> data(T data, String message) {
|
return R.data(data, message);
|
}
|
|
public <T> R<T> data(T data, String message, int code) {
|
return R.data(code, data, message);
|
}
|
|
public R success(String message) {
|
return R.success(message);
|
}
|
|
public R fail(String message) {
|
return R.fail(message);
|
}
|
|
public R status(boolean flag) {
|
return R.status(flag);
|
}
|
|
public LocalFile getFile(MultipartFile file) {
|
return BladeFileUtil.getFile(file);
|
}
|
|
public LocalFile getFile(MultipartFile file, String dir) {
|
return BladeFileUtil.getFile(file, dir);
|
}
|
|
public LocalFile getFile(MultipartFile file, String dir, String path, String virtualPath) {
|
return BladeFileUtil.getFile(file, dir, path, virtualPath);
|
}
|
|
public List<LocalFile> getFiles(List<MultipartFile> files) {
|
return BladeFileUtil.getFiles(files);
|
}
|
|
public List<LocalFile> getFiles(List<MultipartFile> files, String dir) {
|
return BladeFileUtil.getFiles(files, dir);
|
}
|
|
public List<LocalFile> getFiles(List<MultipartFile> files, String dir, String path, String virtualPath) {
|
return BladeFileUtil.getFiles(files, dir, path, virtualPath);
|
}
|
|
protected ResponseEntity<ResourceRegion> download(File file) throws IOException {
|
String fileName = file.getName();
|
return download(file, fileName);
|
}
|
|
protected ResponseEntity<ResourceRegion> download(File file, String fileName) throws IOException {
|
return download((Resource) new FileSystemResource(file), fileName);
|
}
|
|
protected ResponseEntity<ResourceRegion> download(Resource resource, String fileName) throws IOException {
|
HttpStatus status;
|
HttpServletRequest request = WebUtil.getRequest();
|
String header = request.getHeader("User-Agent");
|
String header2 = header == null ? "" : header.toUpperCase();
|
if (header2.contains("MSIE") || header2.contains("TRIDENT") || header2.contains("EDGE")) {
|
status = HttpStatus.OK;
|
} else {
|
status = HttpStatus.CREATED;
|
}
|
long position = 0;
|
long count = resource.contentLength();
|
String range = request.getHeader("Range");
|
if (null != range) {
|
status = HttpStatus.PARTIAL_CONTENT;
|
String[] rangeRange = range.replace("bytes=", "").split("-");
|
position = Long.parseLong(rangeRange[0]);
|
if (rangeRange.length > 1) {
|
long end = Long.parseLong(rangeRange[1]);
|
count = (end - position) + 1;
|
}
|
}
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
|
String encodeFileName = UriUtils.encode(fileName, Charsets.UTF_8);
|
String disposition = "attachment;filename=\"" + encodeFileName + "\";filename*=utf-8''" + encodeFileName;
|
headers.set("Content-Disposition", disposition);
|
return new ResponseEntity<>(new ResourceRegion(resource, position, count), headers, status);
|
}
|
}
|