前端页面三要素
<form action="/upload" method="post" enctype="multipart/form-data"> //一定要设置
//以字节形式发送
姓名: <input type="text" name="username"><br>
年龄: <input type="text" name="age"><br>
头像: <input type="file" name="image"><br>
<input type="submit" value="提交">
</form>后端用MultipartFile类接收
@RestController
public class UploadController {
@PostMapping("/upload")
public Result upload(String username , Integer age,@RequestParam("image")MultipartFile file) {
return Result.success();
}
}
本地存储
@RestController
public class UploadController {
@PostMapping("/upload")
public Result upload(MultipartFile image) throws IOException {
//获取原始文件名
String originalFilename = image.getOriginalFilename();
//构建新的文件名
String newFileName = UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));
//将文件保存在服务器端 E:/images/ 目录下
image.transferTo(new File("E:/images/"+newFileName));
return Result.success();
}
}// @PostMapping("/upload2") // public Result upload(String name, Integer age, MultipartFile image) { // String originalFilename = image.getOriginalFilename(); // System.out.println(originalFilename); // // int lastIndexOf = originalFilename.lastIndexOf("."); // System.out.println(lastIndexOf); // String substring = originalFilename.substring(lastIndexOf); // System.out.println(substring); // // String fileName = UUID.randomUUID().toString() + substring; // // try { // image.transferTo(new File("E:/images/", fileName)); // } catch (IOException e) { // return Result.error("上传失败"); // } // // return Result.success(); // }
MultipartFile类的方法
注意
在SpringBoot中,文件上传,默认单个文件允许最大大小为 1M。如果需要上传大文件,可以进行如下配置:
#配置单个文件最大上传大小
spring.servlet.multipart.max-file-size=10MB
#配置单个请求最大上传大小(一次请求可以上传多个文件)
spring.servlet.multipart.max-request-size=100MB
阿里云OSS官方文档地址:
如何安装OSS Java SDK_对象存储 OSS-阿里云帮助中心
阿里云对象存储OSS
<!-- ali oss--> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.15.1</version> </dependency>
import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSException; import java.io.FileInputStream; import java.io.InputStream; public class Oss { public void testOss(){ // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 String endpoint = "https://oss-cn-beijing.aliyuncs.com"; // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 String accessKeyId = ""; String accessKeySecret = ""; // 填写Bucket名称,例如examplebucket。 String bucketName = ""; // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。 String objectName = "0001.jpg"; // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。 // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。 String filePath= ""; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); try { InputStream inputStream = new FileInputStream(filePath); // 创建PutObject请求。 ossClient.putObject(bucketName, objectName, inputStream); } catch (OSSException oe) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "but was rejected with an error response for some reason."); System.out.println("Error Message:" + oe.getErrorMessage()); System.out.println("Error Code:" + oe.getErrorCode()); System.out.println("Request ID:" + oe.getRequestId()); System.out.println("Host ID:" + oe.getHostId()); } catch (Exception ce) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + "such as not being able to access the network."); System.out.println("Error Message:" + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }
@Component
public class AliOSSUtils {
@Autowired
private AliYunOss aliYunOss;
// @Value("${aliyun.oss.endpoint}")
// private String endpoint;
// @Value("${aliyun.oss.accessKeyId}")
// private String accessKeyId;
// @Value("${aliyun.oss.accessKeySecret}")
// private String accessKeySecret;
// @Value("${aliyun.oss.bucketName}")
// private String bucketName;
/**
* 实现上传图片到OSS
*/
public String upload(MultipartFile file) throws IOException {
// 获取上传的文件的输入流
InputStream inputStream = file.getInputStream();
// 避免文件覆盖
String originalFilename = file.getOriginalFilename();
String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
// 上传文件到 OSS
OSS ossClient = new OSSClientBuilder().build(aliYunOss.getEndpoint(), aliYunOss.getAccessKeyId(), aliYunOss.getAccessKeySecret());
// OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ossClient.putObject(aliYunOss.getBucketName(), fileName, inputStream);
// ossClient.putObject(bucketName, fileName, inputStream);
// 文件访问路径
String url = aliYunOss.getEndpoint().split("//")[0] + "//" + aliYunOss.getBucketName() + "." + aliYunOss.getEndpoint().split("//")[1] + "/" + fileName;
// String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
// 关闭ossClient
ossClient.shutdown();
return url;// 把上传到oss的路径返回
}
}
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss") //配置文件获取连接信息
public class AliYunOss {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}
@RestController public class UploadController { @Autowired private AliOSSUtils aliOSSUtils; @PostMapping("/upload") public Result uploadOss(MultipartFile image) { try { String imageUrl = aliOSSUtils.upload(image); return Result.success(imageUrl); } catch (Exception e) { return Result.error("上传失败"); } }}