这是最近在项目里用到的文件上传,因为原系统将文件存储在独立的服务器上,费用以及维护成本高,所以开始采用OSS文件存储:
- 贴出代码:
public NetState uploadImage(@ApiParam("选择文件") MultipartFile file) {
Optional.ofNullable(file).orElseThrow(()->new NetStateException(NetState.FEAILED,"选择文件",null));
String endpoint = "oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。所以创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "";
String accessKeySecret = "";
// 填写Bucket名称,例如examplebucket。
String bucketName = "haowu-imagefile";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
String fileType = file.getOriginalFilename().split("\\.")[1];
String filename = Produce.getUUID()+"."+fileType;
InputStream inputStream = file.getInputStream();
//设置请求头直接预览
ObjectMetadata meta = new ObjectMetadata();
meta.setContentType("image/jpg");
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName,filename,inputStream,meta);
// 上传文件。
PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);
// 关闭OSSClient。
ossClient.shutdown();
//图片访问url
String url ="https://haowu-imagefile.oss-cn-hangzhou.aliyuncs.com/";
String imageUrl = url+filename;
return NetStateUtils.getNetStateS("成功", imageUrl);
} catch (IOException e) {
return NetStateUtils.getNetStateF("失败");
}
}
- 上述代码用来上传图片文件,如果要上传视频文件等,调整contentType参数即可,如:
//上传视频文件
meta.setContentType("video/mp4");
//所上传的视频是否可以在线播放
meta.setContentDisposition("inline;filename=" + filename);//表示能在线播放
-
返参会带回上传文件的访问链接,如下:
-
通用文件上传
@RequestMapping(value = "/uploadAllFile", method = RequestMethod.POST)
public @ResponseBody
NetState uploadAllFile(HttpServletRequest request, @RequestParam("file") MultipartFile file)
throws Exception {
NetState netState = new NetState();
// 如果文件不为空,写入上传路径
if (file.isEmpty()) {
return NetStateUtils.getNetStateF("请选择文件");
}
String fileType = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
try {
Optional.ofNullable(file).orElseThrow(() -> new NetStateException(NetState.FEAILED, "选择文件", null));
String endpoint = "oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。所以创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "";
String accessKeySecret = "";
// 填写Bucket名称,例如examplebucket。
String bucketName = "haowu-imagefile";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
String filename = Produce.getUUID() + "."+fileType;
InputStream inputStream = file.getInputStream();
//设置请求头直接预览
ObjectMetadata meta = new ObjectMetadata();
// meta.setContentDisposition("inline; filename=" +file.getOriginalFilename());
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, filename, inputStream, meta);
// 上传文件。
ossClient.putObject(putObjectRequest);
// 关闭OSSClient。
ossClient.shutdown();
//访问url
String url = "https://haowu-imagefile.oss-cn-hangzhou.aliyuncs.com/";
String imageUrl = url + filename;
netState.setErrorCode(NetState.SUCCESS_CONN);
netState.setData("上传文件成功");
netState.setJson(imageUrl);
} catch (Exception e) {
netState.setErrorCode(NetState.SYSTEM_ERROR);
netState.setData("上传文件失败");
}
Apiinfoes apiinfoes = ApiinfoesHelper.createApiinfoes(request, "上传文件");
apiinfoesService.insert(ApiinfoesHelper.setApiinfoes(apiinfoes, null, GsonUtil.createJsonString(netState)));
return netState;
}