data.vue
<template>
<el-button size="small" type="success" :loading="this.load" @click="submitUpload">上传到服务器</el-button>
<el-upload
class="upload-demo"
ref="fileUpload"
action="#"
:file-list="fileList"
:multiple="true"
accept=".xlsx"
:before-upload="beforeUpload"
:on-remove="handleRemove"
:limit="10"
:auto-upload="false"
:http-request="httpSub"
style="margin-top: 10px"
>
<el-button size="small" type="primary">
<i class="el-icon-upload el-icon--right"></i>
上传文件
</el-button>
</el-upload>
</template>
<script>
import { getFileList} from "@/api/data/data";
export default {
data() {
return {
load:false,
fileList: [],
fileOssList:[]
};
},
methods: {
submitUpload() {
this.load=true
this.$refs.fileUpload.submit();
},
httpSub(fileList){
let formData = new FormData();
formData.append("file", fileList.file);
formData.append('address', '/file');
upload(formData).then(result=>{
if(result.code==1){
this.$message.error(result.msg)
}else{
this.load=false
this.$message.success("上传成功")
}
})
},
handleRemove(file,fileList) {
return fileList.filter(value=>{
return value!=file
})
},
beforeUpload(file) {
let regExp = file.name.replace(/.+\./, '');
let lower = regExp.toLowerCase(); //把大写字符串全部转为小写字符串
let suffix = ['xls', 'xlsx'];
if (suffix.indexOf(lower) === -1) {
return this.$message.warning('请上传后缀名为 xls、xlsx 的附件 !');
}
let isLt2M = file.size / 1024 / 1024 < 10;
if (!isLt2M) {
return this.$message.error('请上传文件大小不能超过 10MB 的附件 !');
}
},
}
}
</script>
data.js
export function upload(file) {
return request({
url: '/data/uploadFile',
method: 'post',
data:file,
})
}
SpringbootController
@RestController
@RequestMapping("/data")
public class MigrateDataController {
@Autowired
private FileService fileService;
@PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R importFile(@RequestParam("file") MultipartFile file, @RequestParam("address") String address){
Calendar calendar = Calendar.getInstance();
String fileAddress = calendar.get(Calendar.YEAR) + "/" + (calendar.get(Calendar.MONTH)+1) + "/" + calendar.get(Calendar.DATE) +address+"/";
R r = fileService.uploadFile(file, fileAddress);
return r;
}
}
SpringbootService
@Servic
public class FileServiceImp implements FileService{
private final String BUCKET_NAME = "桶名";
private static MinioUtils minioUtils = new MinioUtils("http://xx.xxx.xxx:9000","账号","密码","桶名");
@Override
@Transactional(rollbackFor = Exception.class)
public R uploadFile(MultipartFile file,String fileAddressName) {
String fileName = file.getOriginalFilename();
try {
fileName =new String(file.getOriginalFilename().getBytes("iso-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String allName = fileAddressName+"/"+ fileName;
Map<String, String> resultMap = new HashMap<>(4);
resultMap.put("bucketName", BUCKET_NAME);
resultMap.put("fileName", fileName);
resultMap.put("url", String.format(fileAddressName));
try {
if (!minioUtils.doesFolderExist(BUCKET_NAME,fileAddressName)){
minioUtils.putDirObject(BUCKET_NAME,fileAddressName);
}
if (minioUtils.doesObjectExist(BUCKET_NAME,allName)) {
return R.failed("文件"+fileName+"已存在");
}
minioUtils.putObject(BUCKET_NAME,file,allName,file.getContentType());
} catch (Exception e) {
return R.failed(e.getLocalizedMessage());
}
return R.ok(resultMap);
}
}
minioUtils
public class MinioUtils {
private static MinioClient minioClient;
private static String endpoint;
private static String bucketName;
private static String accessKey;
private static String secretKey;
private static final String SEPARATOR = "/";
private MinioUtils() {
}
public MinioUtils(String endpoint, String bucketName, String accessKey, String secretKey) {
MinioUtils.endpoint = endpoint;
MinioUtils.bucketName = bucketName;
MinioUtils.accessKey = accessKey;
MinioUtils.secretKey = secretKey;
createMinioClient();
}
/**
* 创建minioClient
*/
public void createMinioClient() {
try {
if (null == minioClient) {
log.info("minioClient create start");
minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
createBucket();
log.info("minioClient create end");
}
} catch (Exception e) {
log.error("连接MinIO服务器异常:{}", e);
}
}
/**
* 判断文件是否存在
*
* @param bucketName 存储桶
* @param objectName 对象
* @return true:存在
*/
public static boolean doesObjectExist(String bucketName, String objectName) {
boolean exist = true;
try {
minioClient
.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
} catch (Exception e) {
exist = false;
}
return exist;
}
/**
* 判断文件夹是否存在
*
* @param bucketName 存储桶
* @param objectName 文件夹名称(去掉/)
* @return true:存在
*/
public static boolean doesFolderExist(String bucketName, String objectName) {
boolean exist = false;
try {
Iterable<Result<Item>> results = minioClient.listObjects(
ListObjectsArgs.builder().bucket(bucketName).prefix(objectName).recursive(false).build());
for (Result<Item> result : results) {
Item item = result.get();
if (item.isDir() && objectName.equals(item.objectName())) {
exist = true;
}
}
} catch (Exception e) {
exist = false;
}
return exist;
}
/**
* 获取文件流
*
* @param bucketName bucket名称
* @param objectName 文件名称
* @return 二进制流
*/
public static InputStream getObject(String bucketName, String objectName)
throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
return minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());
}
/**
* 通过MultipartFile,上传文件
*
* @param bucketName 存储桶
* @param file 文件
* @param objectName 对象名
*/
public static ObjectWriteResponse putObject(String bucketName, MultipartFile file,
String objectName, String contentType)
throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
InputStream inputStream = file.getInputStream();
return minioClient.putObject(
PutObjectArgs.builder().bucket(bucketName).object(objectName).contentType(contentType)
.stream(
inputStream, inputStream.available(), -1)
.build());
}
/**
* 创建文件夹或目录
*
* @param bucketName 存储桶
* @param objectName 目录路径
*/
public static ObjectWriteResponse putDirObject(String bucketName, String objectName)
throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
return minioClient.putObject(
PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(
new ByteArrayInputStream(new byte[]{}), 0, -1)
.build());
}
} 上传文件夹名fileAddressName,文件名fileName

8673

被折叠的 条评论
为什么被折叠?



