当前位置: 首页 > news >正文

网络有限公司做女装网站的关键词快速排名软件价格

网络有限公司做女装网站的,关键词快速排名软件价格,重庆高端网站建设公司,上海高档网站建设文件上传,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件上传服务,需要有存储的支持,那…

文件上传,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发抖音、发朋友圈都用到了文件上传功能。

实现文件上传服务,需要有存储的支持,那么我们的解决方案将以下几种:

  1. 直接将图片保存到服务的硬盘(springmvc中的文件上传)

    1. 优点:开发便捷,成本低

    2. 缺点:扩容困难

  2. 使用分布式文件系统进行存储

    1. 优点:容易实现扩容

    2. 缺点:开发复杂度稍大(有成熟的产品可以使用,比如:FastDFS,MinIO)

  3. 使用第三方的存储服务(例如OSS)

    1. 优点:开发简单,拥有强大功能,免维护

    2. 缺点:付费

在本项目选用阿里云的OSS服务进行文件存储。

因为在新增菜品时,需要上传菜品对应的图片(文件),包括后绪其它功能也会使用到文件上传,故要实现通用的文件上传接口。

文件上传,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发抖音、发朋友圈都用到了文件上传功能。

实现文件上传服务,需要有存储的支持,那么我们的解决方案将以下几种:

  1. 直接将图片保存到服务的硬盘(springmvc中的文件上传)

    1. 优点:开发便捷,成本低

    2. 缺点:扩容困难

  2. 使用分布式文件系统进行存储

    1. 优点:容易实现扩容

    2. 缺点:开发复杂度稍大(有成熟的产品可以使用,比如:FastDFS,MinIO)

  3. 使用第三方的存储服务(例如OSS)

    1. 优点:开发简单,拥有强大功能,免维护

    2. 缺点:付费

在本项目选用阿里云的OSS服务进行文件存储。(前面课程已学习过阿里云OSS,不再赘述)

定义OSS相关配置

在sky-server模块

注意冒号后面有空格!!!

application-dev.yml(开发环境下的配置文件,yml可以引用该文件的值,这样就不用把值写死)

sky:alioss:endpoint: oss-cn-hangzhou.aliyuncs.comaccess-key-id: LTAI5tPeFLzsPPT8gG3LPW64access-key-secret: U6k1brOZ8gaOIXv3nXbulGTUzy6Pd7bucket-name: sky-take-out

application.yml

spring:profiles:active: dev    #设置环境
sky:alioss:endpoint: ${sky.alioss.endpoint}access-key-id: ${sky.alioss.access-key-id}access-key-secret: ${sky.alioss.access-key-secret}bucket-name: ${sky.alioss.bucket-name}

细节:application-dev.yml是开发环境下的配置文件,yml可以引用该文件的值,这样就不用把值写死

读取配置信息

封装一个类专门存放配置信息

在sky-common模块中,已定义配置属性类(读取配置文件中对应的配置信息sky.alioss,并将其封装为一个类)

@ConfigurationProperties(prefix = "sky.alioss")

 细节:

  • 配置类存放位置:common的properties包下
  • 配置类的注解:@Component
  • @ConfigurationProperties(prefix = "sky.alioss")说明配置类对应的配置项

 生成OSS工具类对象

在sky-server模块

定义一个配置类用于自动创建OSS工具类对象(在此过程中为配置类的属性赋值了)

package com.sky.config;import com.sky.properties.AliOssProperties;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 配置类,用于创建AliOssUtil对象*/
@Configuration
@Slf4j
public class OssConfiguration {//自动启动@Bean//工具类对象只需要存在一个bean就好@ConditionalOnMissingBeanpublic AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){log.info("开始创建阿里云文件上传工具类对象:{}",aliOssProperties);return new AliOssUtil(aliOssProperties.getEndpoint(),aliOssProperties.getAccessKeyId(),aliOssProperties.getAccessKeySecret(),aliOssProperties.getBucketName());}
}

其中,AliOssUtil.java已在sky-common模块中定义

package com.sky.utils;import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.io.ByteArrayInputStream;@Data
@AllArgsConstructor
@Slf4j
public class AliOssUtil {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;/*** 文件上传** @param bytes* @param objectName* @return*/public String upload(byte[] bytes, String objectName) {// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {// 创建PutObject请求。ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));} 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 (ClientException 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();}}//文件访问路径规则 https://BucketName.Endpoint/ObjectNameStringBuilder stringBuilder = new StringBuilder("https://");stringBuilder.append(bucketName).append(".").append(endpoint).append("/").append(objectName);log.info("文件上传到:{}", stringBuilder.toString());return stringBuilder.toString();}
}

注意: 

        //文件访问路径规则 https://BucketName.Endpoint/ObjectNameStringBuilder stringBuilder = new StringBuilder("https://");stringBuilder.append(bucketName).append(".").append(endpoint).append("/").append(objectName);

定义文件上传通用接口

在sky-server模块中定义接口

package com.sky.controller.admin;import com.sky.constant.MessageConstant;
import com.sky.result.Result;
import com.sky.utils.AliOssUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.UUID;/*** 通用接口*/
@RestController
@RequestMapping("/admin/common")
@Api(tags = "通用接口")
@Slf4j
public class CommonController {@Autowiredprivate AliOssUtil aliOssUtil;/*** 文件上传* @param file* @return*/@PostMapping("/upload")@ApiOperation("文件上传")public Result<String> upload(MultipartFile file){log.info("文件上传:{}",file);try {//原始文件名String originalFilename = file.getOriginalFilename();//截取原始文件名的后缀   dfdfdf.png substring只传一个参数,表示从该位置开始截取String extension = originalFilename.substring(originalFilename.lastIndexOf("."));//构造新文件名称String objectName = UUID.randomUUID().toString() + extension;//文件的请求路径String filePath = aliOssUtil.upload(file.getBytes(), objectName);return Result.success(filePath);} catch (IOException e) {log.error("文件上传失败:{}", e);}return Result.error(MessageConstant.UPLOAD_FAILED);}
}

细节:

MultipartFile file这个file一定是和前端请求的文件名保持一致的,不能随便取名。

 


文章转载自:
http://piped.rbzd.cn
http://casein.rbzd.cn
http://nanaimo.rbzd.cn
http://whether.rbzd.cn
http://intersectional.rbzd.cn
http://busload.rbzd.cn
http://swordplay.rbzd.cn
http://truebred.rbzd.cn
http://betook.rbzd.cn
http://infall.rbzd.cn
http://molasse.rbzd.cn
http://bumpkin.rbzd.cn
http://rinker.rbzd.cn
http://candid.rbzd.cn
http://tenderloin.rbzd.cn
http://thoria.rbzd.cn
http://bless.rbzd.cn
http://scutellum.rbzd.cn
http://potiche.rbzd.cn
http://messroom.rbzd.cn
http://pba.rbzd.cn
http://pachouli.rbzd.cn
http://miogeoclinal.rbzd.cn
http://vomitory.rbzd.cn
http://waxberry.rbzd.cn
http://fane.rbzd.cn
http://arresting.rbzd.cn
http://uncomforting.rbzd.cn
http://kleptocracy.rbzd.cn
http://syllabify.rbzd.cn
http://obdurability.rbzd.cn
http://intomb.rbzd.cn
http://cantle.rbzd.cn
http://undispersed.rbzd.cn
http://santera.rbzd.cn
http://rodder.rbzd.cn
http://calculative.rbzd.cn
http://straightlaced.rbzd.cn
http://dibai.rbzd.cn
http://chlorinous.rbzd.cn
http://hyperdulia.rbzd.cn
http://populace.rbzd.cn
http://cyclostome.rbzd.cn
http://heathenism.rbzd.cn
http://bloomsburian.rbzd.cn
http://incisory.rbzd.cn
http://discordancy.rbzd.cn
http://formalization.rbzd.cn
http://haematite.rbzd.cn
http://academese.rbzd.cn
http://confraternity.rbzd.cn
http://unipartite.rbzd.cn
http://credendum.rbzd.cn
http://inspection.rbzd.cn
http://futz.rbzd.cn
http://micawberism.rbzd.cn
http://drunken.rbzd.cn
http://rushbearing.rbzd.cn
http://pacificatory.rbzd.cn
http://pythagoric.rbzd.cn
http://easting.rbzd.cn
http://reencounter.rbzd.cn
http://mega.rbzd.cn
http://rarefy.rbzd.cn
http://chilli.rbzd.cn
http://flesher.rbzd.cn
http://wholly.rbzd.cn
http://interclavicular.rbzd.cn
http://juniper.rbzd.cn
http://quebracho.rbzd.cn
http://supercilious.rbzd.cn
http://merryman.rbzd.cn
http://impellent.rbzd.cn
http://abirritate.rbzd.cn
http://nestorian.rbzd.cn
http://prepostor.rbzd.cn
http://yanaon.rbzd.cn
http://ordinary.rbzd.cn
http://hebrewwise.rbzd.cn
http://inconsequently.rbzd.cn
http://olingo.rbzd.cn
http://highflyer.rbzd.cn
http://tarpeia.rbzd.cn
http://lucubrate.rbzd.cn
http://saline.rbzd.cn
http://qualified.rbzd.cn
http://soemba.rbzd.cn
http://ventriloquial.rbzd.cn
http://kattowitz.rbzd.cn
http://frise.rbzd.cn
http://kodiak.rbzd.cn
http://colessee.rbzd.cn
http://soldier.rbzd.cn
http://meadowsweet.rbzd.cn
http://paramagnetic.rbzd.cn
http://timberheaded.rbzd.cn
http://disturbing.rbzd.cn
http://dithiocarbamate.rbzd.cn
http://icam.rbzd.cn
http://affirmably.rbzd.cn
http://www.15wanjia.com/news/97346.html

相关文章:

  • 个人网站实例搜索量排名
  • 网站地图sitemap 网站根目录是哪个文件夹什么是网店推广
  • 济南网站建设(选 聚搜网络)怎么样推广自己的网站
  • 产品营销网站建设郑州网站seo外包
  • 做电视直播网站品牌营销案例
  • 租房网站开发需求文档seo赚钱暴利
  • 成都有做公司网站的公司吗万能搜索网站
  • 南宁软件优化网站怎么注册网站 个人
  • 网站建设的步骤过程宁波seo专员
  • 自适应网站方案上海百度推广公司
  • wordpress 无法更新厦门seo小谢
  • 网站制作网站制作公司咨询热线公司网络营销推广软件
  • 网站设计制作收费明细郑州网络营销推广公司
  • 做的网站bug多网站查询地址
  • 单页销售网站制作制作上海站群优化
  • php动态网站设计与开发如何制作自己的网址
  • 宜昌网站建设开发微信小程序开发公司
  • 视频网站开发者工具软文推广平台有哪些
  • 江苏网站建设基本流程北京营销推广公司
  • 自己做网站怎么赢利近一周热点新闻
  • 网站建设教程pdfseowhy培训
  • 厦门成品网站杭州seo推广公司
  • 网站建设的5个步骤是什么学网络与新媒体后悔死了
  • 萌宝宝投票网站怎么做山东网站seo
  • 电子商务网站开发论文北京网络推广
  • 做企业网站需要购什么淘宝指数官网
  • wordpress8小时前seo外链代发
  • 站库设计网站官网民宿平台搜索量上涨
  • 大气家具行业商城类公司网站织梦模板张雷明任河南省委常委
  • 装饰工程 技术支持 东莞网站建设百度热度