怎么样使用JAVA代码实现文件上传到阿里云服务器内容详细



 

写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。

这博客是对自己学习的一点点总结及记录,如果您对 Java算法 感兴趣,可以关注我的动态,我们一起学习。

用知识改变命运,让我们的家人过上更好的生活

文章目录

1、pom.xml 中添加依赖

<!--aliyunOSS-->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>2.8.3</version>
</dependency>

<!–日期时间工具–>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.1</version>
</dependency>

2、配置application.properties

#不同的服务器,地址不同
aliyun.oss.file.endpoint=your endpoint
aliyun.oss.file.keyid=your accessKeyId
aliyun.oss.file.keysecret=your accessKeySecret
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=your bucketname

3、从配置文件读取常量

常量类,在服务器启动的时候,读取配置文件application.properties中的配置。

使用@Value读取application.properties里的配置内容,用spring的 InitializingBean 的 afterPropertiesSet 来初始化配置信息,这个方法将在所有的属性被初始化后调用。

@Component
public class ConstantPropertiesUtil implements InitializingBean {
<span class="token annotation punctuation">@Value</span><span class="token punctuation">(</span><span class="token string">"${aliyun.oss.file.endpoint}"</span><span class="token punctuation">)</span> <span class="token keyword">private</span> String endPoint<span class="token punctuation">;</span> <span class="token annotation punctuation">@Value</span><span class="token punctuation">(</span><span class="token string">"${aliyun.oss.file.keyid}"</span><span class="token punctuation">)</span> <span class="token keyword">private</span> String keyId<span class="token punctuation">;</span> <span class="token annotation punctuation">@Value</span><span class="token punctuation">(</span><span class="token string">"${aliyun.oss.file.keysecret}"</span><span class="token punctuation">)</span> <span class="token keyword">private</span> String keySecret<span class="token punctuation">;</span> <span class="token annotation punctuation">@Value</span><span class="token punctuation">(</span><span class="token string">"${aliyun.oss.file.bucketname}"</span><span class="token punctuation">)</span> <span class="token keyword">private</span> String bucketName<span class="token punctuation">;</span> <span class="token comment">// 定义常量,为了能够使用</span> <span class="token keyword">public</span> <span class="token keyword">static</span> String ENDPOINT<span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword">static</span> String KEYID<span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword">static</span> String KEYSECRET<span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword">static</span> String BUCKETNAME<span class="token punctuation">;</span> <span class="token comment">/** * 服务器启动的时候,ConstantPropertiesUtil初始化,调用里面的afterPropertiesSet方法,读取配置文件的内容 * @throws Exception */</span> <span class="token annotation punctuation">@Override</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">afterPropertiesSet</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> Exception <span class="token punctuation">{<!-- --></span> ENDPOINT <span class="token operator">=</span> endPoint<span class="token punctuation">;</span> KEYID <span class="token operator">=</span> keyId<span class="token punctuation">;</span> KEYSECRET <span class="token operator">=</span> keySecret<span class="token punctuation">;</span> BUCKETNAME <span class="token operator">=</span> bucketName<span class="token punctuation">;</span> <span class="token punctuation">}</span> 

4、实现文件上传

定义具体的数据返回格式

@Data
public class R {
<span class="token keyword">private</span> Boolean success<span class="token punctuation">;</span> <span class="token comment">// 响应是否成功</span> <span class="token keyword">private</span> Integer code<span class="token punctuation">;</span> <span class="token comment">// 状态码</span> <span class="token keyword">private</span> String message<span class="token punctuation">;</span> <span class="token comment">// 返回信息</span> <span class="token keyword">private</span> Map<span class="token generics function"><span class="token punctuation">&lt;</span>String<span class="token punctuation">,</span> Object<span class="token punctuation">&gt;</span></span> data <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token operator">&lt;</span><span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 返回数据,放在键值对中</span> <span class="token keyword">private</span> <span class="token function">R</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token punctuation">}</span> <span class="token comment">/** * 操作成功,调用这个方法 * * @return 返回成功的数据 */</span> <span class="token keyword">public</span> <span class="token keyword">static</span> R <span class="token function">ok</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> R r <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">R</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> r<span class="token punctuation">.</span><span class="token function">setSuccess</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> r<span class="token punctuation">.</span><span class="token function">setCode</span><span class="token punctuation">(</span>ResultCode<span class="token punctuation">.</span>SUCCESS<span class="token punctuation">)</span><span class="token punctuation">;</span> r<span class="token punctuation">.</span><span class="token function">setMessage</span><span class="token punctuation">(</span><span class="token string">"操作成功"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> r<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * 操作失败,调用这个方法 * * @return 返回失败的数据 */</span> <span class="token keyword">public</span> <span class="token keyword">static</span> R <span class="token function">error</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> R r <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">R</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> r<span class="token punctuation">.</span><span class="token function">setSuccess</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span> r<span class="token punctuation">.</span><span class="token function">setCode</span><span class="token punctuation">(</span>ResultCode<span class="token punctuation">.</span>ERROR<span class="token punctuation">)</span><span class="token punctuation">;</span> r<span class="token punctuation">.</span><span class="token function">setMessage</span><span class="token punctuation">(</span><span class="token string">"操作失败"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> r<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// 使用链式编程</span> <span class="token keyword">public</span> R <span class="token function">success</span><span class="token punctuation">(</span>Boolean success<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">setSuccess</span><span class="token punctuation">(</span>success<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> R <span class="token function">message</span><span class="token punctuation">(</span>String message<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">setMessage</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> R <span class="token function">code</span><span class="token punctuation">(</span>Integer code<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">setCode</span><span class="token punctuation">(</span>code<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> R <span class="token function">data</span><span class="token punctuation">(</span>String key<span class="token punctuation">,</span> Object value<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">this</span><span class="token punctuation">.</span>data<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span>key<span class="token punctuation">,</span> value<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> R <span class="token function">data</span><span class="token punctuation">(</span>Map<span class="token generics function"><span class="token punctuation">&lt;</span>String<span class="token punctuation">,</span> Object<span class="token punctuation">&gt;</span></span> map<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">setData</span><span class="token punctuation">(</span>map<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> 

上传文件的Controller

@RestController
@RequestMapping("/user/oss")
@CrossOrigin // 解决跨域
public class FileUploadController {
<span class="token comment">/** * 上传文件 * * @return */</span> <span class="token annotation punctuation">@PostMapping</span><span class="token punctuation">(</span><span class="token string">"upload"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> R <span class="token function">uploadTeacherImg</span><span class="token punctuation">(</span><span class="token annotation punctuation">@RequestParam</span><span class="token punctuation">(</span><span class="token string">"file"</span><span class="token punctuation">)</span> MultipartFile file<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 地域节点</span> String endpoint <span class="token operator">=</span> ConstantPropertiesUtil<span class="token punctuation">.</span>ENDPOINT<span class="token punctuation">;</span> <span class="token comment">// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建。</span> String accessKeyId <span class="token operator">=</span> ConstantPropertiesUtil<span class="token punctuation">.</span>KEYID<span class="token punctuation">;</span> String accessKeySecret <span class="token operator">=</span> ConstantPropertiesUtil<span class="token punctuation">.</span>KEYSECRET<span class="token punctuation">;</span> <span class="token comment">// BucketName</span> String yourBucketName <span class="token operator">=</span> ConstantPropertiesUtil<span class="token punctuation">.</span>BUCKETNAME<span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 1.获取上传文件 MultipartFile file</span> <span class="token comment">// @RequestParam("file") file 与表单输入项的name值保持一致</span> <span class="token comment">// 2.获取上传文件名称,获取上传文件输入流</span> String fileName <span class="token operator">=</span> file<span class="token punctuation">.</span><span class="token function">getOriginalFilename</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 在文件名称之前添加uuid值,保证文件名称不重复</span> String uuid <span class="token operator">=</span> UUID<span class="token punctuation">.</span><span class="token function">randomUUID</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> fileName <span class="token operator">=</span> uuid <span class="token operator">+</span> fileName<span class="token punctuation">;</span> <span class="token comment">// 获取当前日期 2020/01/03</span> String filePath <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DateTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token string">"yyyy/MM/dd"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 拼接文件完整路径 2020/01/03/parker.jpg</span> fileName <span class="token operator">=</span> filePath <span class="token operator">+</span> <span class="token string">"/"</span> <span class="token operator">+</span> fileName<span class="token punctuation">;</span> <span class="token comment">// 获取上传文件输入流</span> InputStream in <span class="token operator">=</span> file<span class="token punctuation">.</span><span class="token function">getInputStream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 3.把上传文件存储到阿里云oss里面</span> <span class="token comment">// 创建OSSClient实例。</span> OSS ossClient <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">OSSClient</span><span class="token punctuation">(</span>endpoint<span class="token punctuation">,</span> accessKeyId<span class="token punctuation">,</span> accessKeySecret<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 上传文件流</span> <span class="token comment">// 第一个参数时BucketName,第二个参数是文件名称,第三个参数是输入流</span> ossClient<span class="token punctuation">.</span><span class="token function">putObject</span><span class="token punctuation">(</span>yourBucketName<span class="token punctuation">,</span> fileName<span class="token punctuation">,</span> in<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 关闭OSSClient。</span> ossClient<span class="token punctuation">.</span><span class="token function">shutdown</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 返回上传之后的oss存储路径</span> String path <span class="token operator">=</span> <span class="token string">"http://"</span> <span class="token operator">+</span> yourBucketName <span class="token operator">+</span> <span class="token string">"."</span> <span class="token operator">+</span> endpoint <span class="token operator">+</span> <span class="token string">"/"</span> <span class="token operator">+</span> fileName<span class="token punctuation">;</span> <span class="token keyword">return</span> R<span class="token punctuation">.</span><span class="token function">ok</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">data</span><span class="token punctuation">(</span><span class="token string">"imgurl"</span><span class="token punctuation">,</span> path<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> R<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> 


由于水平有限,本博客难免有不足,恳请各位大佬不吝赐教!

**云服务器搭载业务,选择合适的平台最重要!

从目前国内云计算市场的格局来看,国内云计算前三强分别是阿里云、腾讯云和华为云,阿里云、腾讯云作为背靠互联网平台的企业,更偏向于B端用户;华为与作为传统的通信巨头,更偏向于G端。

当然如何选择服务器机型,这里有篇文档汇总的比较详细,文档地址:

云服务器哪家好!2021年阿里云、腾讯云、华为云的服务器配置及价格对比?​

如果是高并发,高IO业务场景,需要确定服务器规格,可让业务应用性能发挥到最佳,参考官方文档:

阿里云服务器规格:规格实例族 - 云服务器 ECS

腾讯云服务器规格:规格实例族 - 云服务器CVM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值