最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot操作阿里云OSS實(shí)現(xiàn)文件上傳,下載,刪除功能

 更新時(shí)間:2020年11月02日 11:47:54   作者:海賊王1999  
這篇文章主要介紹了springboot操作阿里云OSS實(shí)現(xiàn)文件上傳,下載,刪除功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

參考資料Java操作阿里云OSS操作官方文檔

學(xué)會(huì)看文檔,并實(shí)際運(yùn)用也是一種習(xí)慣和技能

下面就來(lái)簡(jiǎn)單入門(mén)一下,用當(dāng)下比較熱門(mén)的Springboot 去操作阿里云OSS文件存儲(chǔ)。

1.需求

(沒(méi)踩過(guò)下面的坑的小伙伴可以直接跳過(guò)這一章節(jié))

問(wèn)題簡(jiǎn)述

首先,我在之前自己做一些開(kāi)源小項(xiàng)目案例中遇到一些文件上傳下載的問(wèn)題,比如在本機(jī)文件上傳和下載都可以正常使用,通過(guò)將文件上傳到Springboot項(xiàng)目的根目錄下,按日期分文件夾,文件訪(fǎng)問(wèn)也很方便,可以直接返回文件相對(duì)路徑地址,并直接可以訪(fǎng)問(wèn)。

問(wèn)題

然而,這種方式存在弊端,因?yàn)楫?dāng)項(xiàng)目打包(jar包)部署阿里云學(xué)生機(jī)后,出現(xiàn)類(lèi)似io.NotFoundException...(No Such Directory)的問(wèn)題,,而如果打war包部署到tomcat則沒(méi)問(wèn)題,可以正常使用,經(jīng)過(guò)排查很久,找出問(wèn)題所在:
因?yàn)?strong>jar打包封裝后是不能改變其內(nèi)部目錄結(jié)構(gòu)的,也就是說(shuō),按日期分類(lèi)的文件上傳文件夾,如果當(dāng)需要?jiǎng)?chuàng)建新日期的文件夾的時(shí)候,是無(wú)法在jar包中新增文件夾的,這時(shí)候就會(huì)出現(xiàn)IO異常問(wèn)題。而對(duì)于放在tomcat中的war包,當(dāng)tomcat運(yùn)行的時(shí)候會(huì)自動(dòng)解壓war包,其在服務(wù)器上是存在真實(shí)路徑的。

解決方案

  • 方案一:我在網(wǎng)上找了一種方法,是通過(guò)打完jar包部署后,給springboot項(xiàng)目static下的文件上傳文件夾單獨(dú)分離出來(lái)(相當(dāng)于是以相對(duì)路徑換絕對(duì)路徑),訪(fǎng)問(wèn)的時(shí)候直接相當(dāng)通過(guò)服務(wù)器上和jar包同級(jí)目錄下新建一個(gè)文件上傳文件夾。
  • 方案二:直接將文件上傳到服務(wù)器指定路徑下的文件上傳位置,這種方式也相當(dāng)于直接使用絕對(duì)路徑。
  • 方案三:在服務(wù)器上使用FastDFS和Nginx搭建分布式文件存儲(chǔ),這種方式比較復(fù)雜,而且學(xué)生及本來(lái)內(nèi)存和帶寬就小,在自己電腦的虛擬機(jī)可以試試這種方案,還是挺好用的,學(xué)生服務(wù)器就算了。
  • 方案四:就是直接將文件上傳到阿里云OSS文件存儲(chǔ)系統(tǒng)上

2. 阿里云OSS購(gòu)買(mǎi)和配置

這個(gè)比較簡(jiǎn)單,給大家推薦一篇博文自己了解下阿里云oss購(gòu)買(mǎi)和配置,也可以參考阿里云OSS官方文檔。

3. Springboot操作OSS

創(chuàng)建一個(gè)spring boot項(xiàng)目,pom文件需要引入依賴(lài):

pom.xml

<dependencies>
 <!--
 個(gè)人版本踩坑:
 不加這個(gè)依賴(lài)的話(huà),當(dāng)在配置類(lèi)中
 使用@ConfigurationProperties(prefix = "aliyun")注解時(shí),
 我這個(gè)版本的spring boot會(huì)提示有問(wèn)題
 -->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-configuration-processor</artifactId>
 <optional>true</optional>
 </dependency>
 <!-- swagger2 -->
 <dependency>
 <groupId>io.springfox</groupId>
 <artifactId>springfox-swagger2</artifactId>
 <version>2.9.2</version>
 </dependency>
 <!-- swagger ui -->
 <dependency>
 <groupId>io.springfox</groupId>
 <artifactId>springfox-swagger-ui</artifactId>
 <version>2.9.2</version>
 </dependency>
 <!-- thymeleaf 可不加,個(gè)人習(xí)慣性引入 -->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-thymeleaf</artifactId>
 </dependency>
 <!-- web -->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <!-- 熱部署,看個(gè)人習(xí)慣 -->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-devtools</artifactId>
 <scope>runtime</scope>
 <optional>true</optional>
 </dependency>
 
 <!-- 小辣椒插件,推薦使用,可以節(jié)省javaBean的setter/getter,還可以使用鏈?zhǔn)秸{(diào)用 -->
 <dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <optional>true</optional>
 </dependency>
 <!-- fastJson -->
 <dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>fastjson</artifactId>
 <version>1.2.62</version>
 </dependency>
 <!-- aliyun-oos -->
 <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>
 <!-- apache-common-lang3 -->
 <dependency>
 <groupId>org.apache.commons</groupId>
 <artifactId>commons-lang3</artifactId>
 <version>3.8.1</version>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 <exclusions>
 <exclusion>
 <groupId>org.junit.vintage</groupId>
 <artifactId>junit-vintage-engine</artifactId>
 </exclusion>
 </exclusions>
 </dependency>
</dependencies>

包結(jié)構(gòu)很簡(jiǎn)單:

在這里插入圖片描述

我們使用自己添加的application-aliyun-oss.properties配置文件,去配置OSS相關(guān)信息,之所以不在application.yml 中配置,看個(gè)人習(xí)慣了,因?yàn)樽远x的配置屬性還是提出來(lái)配比較好,沒(méi)必要所有的都配到application.yml(properties)中去。

application-aliyun-oss.properties

# 文件上傳大小限制
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=1000MB

# 地域節(jié)點(diǎn)
aliyun.endPoint=oss-cn-beijing.aliyuncs.com
# Bucket 域名
aliyun.urlPrefix=http://csp-xxxx.oss-cn-beijing.aliyuncs.com/
# accessKey Id
aliyun.accessKeyId=LTAI4XXXXXXXzqD1saGFZ
# accessKey Secret
aliyun.accessKeySecret=2WjxNXXXXXXXX4f2bREc
# 你的Bucket名稱(chēng)
aliyun.bucketName=csp-xxxx
# 目標(biāo)文件夾
aliyun.fileHost=files

config包下的相關(guān)配置類(lèi)

AliyunOssConfig.java

/**
 * @Auther: csp1999
 * @Date: 2020/10/31/13:33
 * @Description: 阿里云 OSS 基本配置
 */
// 聲明配置類(lèi),放入Spring容器
@Configuration
// 指定配置文件位置
@PropertySource(value = {"classpath:application-aliyun-oss.properties"})
// 指定配置文件中自定義屬性前綴
@ConfigurationProperties(prefix = "aliyun")
@Data// lombok
@Accessors(chain = true)// 開(kāi)啟鏈?zhǔn)秸{(diào)用
public class AliyunOssConfig {
 private String endPoint;// 地域節(jié)點(diǎn)
 private String accessKeyId;
 private String accessKeySecret;
 private String bucketName;// OSS的Bucket名稱(chēng)
 private String urlPrefix;// Bucket 域名
 private String fileHost;// 目標(biāo)文件夾

 // 將OSS 客戶(hù)端交給Spring容器托管
 @Bean
 public OSS OSSClient() {
 return new OSSClient(endPoint, accessKeyId, accessKeySecret);
 }
}

Swagger2Config.java

/**
 * @Auther: csp1999
 * @Date: 2020/10/31/16:30
 * @Description: Swagger 配置類(lèi)
 */
@Configuration
@EnableSwagger2// 開(kāi)啟swagger2
public class Swagger2Config {

 @Bean
 public Docket webApiConfig() {

 return new Docket(DocumentationType.SWAGGER_2)
 .groupName("webApi")
 .apiInfo(webApiInfo())
 .select()
 .paths(Predicates.not(PathSelectors.regex("/error.*")))
 .build();
 }

 private ApiInfo webApiInfo() {
 return new ApiInfoBuilder()
 .title("SpringBoot整合OSS-API文檔")
 .description("阿里云OSS-文件上傳下載測(cè)試")
 .version("1.0")
 .contact(new Contact("CSP", "https://blog.csdn.net/weixin_43591980", ""))
 .build();
 }
}

定義一個(gè)關(guān)于執(zhí)行狀態(tài)結(jié)果的枚舉類(lèi)

/**
 * @Auther: csp1999
 * @Date: 2020/10/31/17:03
 * @Description: 狀態(tài)碼枚舉類(lèi)
 */
public enum StatusCode {
 SUCCESS("success",200),ERROR("error",500);
 private String msg;
 private Integer code;

 StatusCode(String msg,Integer code){
 this.msg = msg;
 this.code = code;
 }
 StatusCode(Integer code){
 this.code = code;
 }
 StatusCode(String msg){
 this.msg = msg;
 }
 public String getMsg() {
 return msg;
 }
 public void setMsg(String msg) {
 this.msg = msg;
 }
 public Integer getCode() {
 return code;
 }
 public void setCode(Integer code) {
 this.code = code;
 }
}

service層

在service使用ossClient操作阿里云OSS,進(jìn)行上傳、下載、刪除、查看所有文件等操作,同時(shí)可以將圖片的url進(jìn)行入庫(kù)操作:

FileUploadService.java

/**
 * @Auther: csp1999
 * @Date: 2020/10/31/14:30
 * @Description: 文件上傳Service (為節(jié)省文章中的代碼篇幅,不再做接口實(shí)現(xiàn)類(lèi)處理)
 */
@Service("fileUploadService")
public class FileUploadService {
 // 允許上傳文件(圖片)的格式
 private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg",
 ".jpeg", ".gif", ".png"};
 @Autowired
 private OSS ossClient;// 注入阿里云oss文件服務(wù)器客戶(hù)端
 @Autowired
 private AliyunOssConfig aliyunOssConfig;// 注入阿里云OSS基本配置類(lèi)

 /*
 * 文件上傳
 * 注:阿里云OSS文件上傳官方文檔鏈接:https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11186623.6.749.11987a7dRYVSzn
 * @param: uploadFile
 * @return: string
 * @create: 2020/10/31 14:36
 * @author: csp1999
 */
 public String upload(MultipartFile uploadFile) {
 // 獲取oss的Bucket名稱(chēng)
 String bucketName = aliyunOssConfig.getBucketName();
 // 獲取oss的地域節(jié)點(diǎn)
 String endpoint = aliyunOssConfig.getEndPoint();
 // 獲取oss的AccessKeySecret
 String accessKeySecret = aliyunOssConfig.getAccessKeySecret();
 // 獲取oss的AccessKeyId
 String accessKeyId = aliyunOssConfig.getAccessKeyId();
 // 獲取oss目標(biāo)文件夾
 String filehost = aliyunOssConfig.getFileHost();
 // 返回圖片上傳后返回的url
 String returnImgeUrl = "";

 // 校驗(yàn)圖片格式
 boolean isLegal = false;
 for (String type : IMAGE_TYPE) {
 if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) {
 isLegal = true;
 break;
 }
 }
 if (!isLegal) {// 如果圖片格式不合法
 return StatusCode.ERROR.getMsg();
 }
 // 獲取文件原名稱(chēng)
 String originalFilename = uploadFile.getOriginalFilename();
 // 獲取文件類(lèi)型
 String fileType = originalFilename.substring(originalFilename.lastIndexOf("."));
 // 新文件名稱(chēng)
 String newFileName = UUID.randomUUID().toString() + fileType;
 // 構(gòu)建日期路徑, 例如:OSS目標(biāo)文件夾/2020/10/31/文件名
 String filePath = new SimpleDateFormat("yyyy/MM/dd").format(new Date());
 // 文件上傳的路徑地址
 String uploadImgeUrl = filehost + "/" + filePath + "/" + newFileName;

 // 獲取文件輸入流
 InputStream inputStream = null;
 try {
 inputStream = uploadFile.getInputStream();
 } catch (IOException e) {
 e.printStackTrace();
 }
 /**
 * 下面兩行代碼是重點(diǎn)坑:
 * 現(xiàn)在阿里云OSS 默認(rèn)圖片上傳ContentType是image/jpeg
 * 也就是說(shuō),獲取圖片鏈接后,圖片是下載鏈接,而并非在線(xiàn)瀏覽鏈接,
 * 因此,這里在上傳的時(shí)候要解決ContentType的問(wèn)題,將其改為image/jpg
 */
 ObjectMetadata meta = new ObjectMetadata();
 meta.setContentType("image/jpg");

 //文件上傳至阿里云OSS
 ossClient.putObject(bucketName, uploadImgeUrl, inputStream, meta);
 /**
 * 注意:在實(shí)際項(xiàng)目中,文件上傳成功后,數(shù)據(jù)庫(kù)中存儲(chǔ)文件地址
 */
 // 獲取文件上傳后的圖片返回地址
 returnImgeUrl = "http://" + bucketName + "." + endpoint + "/" + uploadImgeUrl;

 return returnImgeUrl;
 }

 /*
 * 文件下載
 * @param: fileName
 * @param: outputStream
 * @return: void
 * @create: 2020/10/31 16:19
 * @author: csp1999
 */
 public String download(String fileName, HttpServletResponse response) throws UnsupportedEncodingException {
// // 設(shè)置響應(yīng)頭為下載
// response.setContentType("application/x-download");
// // 設(shè)置下載的文件名
// response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
// response.setCharacterEncoding("UTF-8");
 // 文件名以附件的形式下載
 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

 // 獲取oss的Bucket名稱(chēng)
 String bucketName = aliyunOssConfig.getBucketName();
 // 獲取oss目標(biāo)文件夾
 String filehost = aliyunOssConfig.getFileHost();
 // 日期目錄
 // 注意,這里雖然寫(xiě)成這種固定獲取日期目錄的形式,邏輯上確實(shí)存在問(wèn)題,但是實(shí)際上,filePath的日期目錄應(yīng)該是從數(shù)據(jù)庫(kù)查詢(xún)的
 String filePath = new DateTime().toString("yyyy/MM/dd");

 String fileKey = filehost + "/" + filePath + "/" + fileName;
 // ossObject包含文件所在的存儲(chǔ)空間名稱(chēng)、文件名稱(chēng)、文件元信息以及一個(gè)輸入流。
 OSSObject ossObject = ossClient.getObject(bucketName, fileKey);
 try {
 // 讀取文件內(nèi)容。
 InputStream inputStream = ossObject.getObjectContent();
 BufferedInputStream in = new BufferedInputStream(inputStream);// 把輸入流放入緩存流
 ServletOutputStream outputStream = response.getOutputStream();
 BufferedOutputStream out = new BufferedOutputStream(outputStream);// 把輸出流放入緩存流
 byte[] buffer = new byte[1024];
 int len = 0;
 while ((len = in.read(buffer)) != -1) {
 out.write(buffer, 0, len);
 }
 if (out != null) {
 out.flush();
 out.close();
 }
 if (in != null) {
 in.close();
 }
 return StatusCode.SUCCESS.getMsg();
 } catch (Exception e) {
 return StatusCode.ERROR.getMsg();
 }
 }

 /*
 * 文件刪除
 * @param: objectName
 * @return: java.lang.String
 * @create: 2020/10/31 16:50
 * @author: csp1999
 */
 public String delete(String fileName) {
 // 獲取oss的Bucket名稱(chēng)
 String bucketName = aliyunOssConfig.getBucketName();
 // 獲取oss的地域節(jié)點(diǎn)
 String endpoint = aliyunOssConfig.getEndPoint();
 // 獲取oss的AccessKeySecret
 String accessKeySecret = aliyunOssConfig.getAccessKeySecret();
 // 獲取oss的AccessKeyId
 String accessKeyId = aliyunOssConfig.getAccessKeyId();
 // 獲取oss目標(biāo)文件夾
 String filehost = aliyunOssConfig.getFileHost();
 // 日期目錄
 // 注意,這里雖然寫(xiě)成這種固定獲取日期目錄的形式,邏輯上確實(shí)存在問(wèn)題,但是實(shí)際上,filePath的日期目錄應(yīng)該是從數(shù)據(jù)庫(kù)查詢(xún)的
 String filePath = new DateTime().toString("yyyy/MM/dd");

 try {
 /**
 * 注意:在實(shí)際項(xiàng)目中,不需要?jiǎng)h除OSS文件服務(wù)器中的文件,
 * 只需要?jiǎng)h除數(shù)據(jù)庫(kù)存儲(chǔ)的文件路徑即可!
 */
 // 建議在方法中創(chuàng)建OSSClient 而不是使用@Bean注入,不然容易出現(xiàn)Connection pool shut down
 OSSClient ossClient = new OSSClient(endpoint,
  accessKeyId, accessKeySecret);
 // 根據(jù)BucketName,filetName刪除文件
 // 刪除目錄中的文件,如果是最后一個(gè)文件fileoath目錄會(huì)被刪除。
 String fileKey = filehost + "/" + filePath + "/" + fileName;
 ossClient.deleteObject(bucketName, fileKey);

 try {
 } finally {
 ossClient.shutdown();
 }
 System.out.println("文件刪除!");
 return StatusCode.SUCCESS.getMsg();
 } catch (Exception e) {
 e.printStackTrace();
 return StatusCode.ERROR.getMsg();
 }
 }
}

controller層

controller提供測(cè)試接口

/**
 * @Auther: csp1999
 * @Date: 2020/10/31/16:40
 * @Description: OSS 文件上傳controller
 */
@Api(description = "阿里云OSS文件上傳、下載、刪除API")
@RequestMapping("api/pri/file")
@RestController
public class OssFileController {
 @Autowired
 private FileUploadService fileUploadService;

 /*
 * 文件上傳api
 * @param: file
 * @return: com.alibaba.fastjson.JSONObject
 * @create: 2020/10/31 17:35
 * @author: csp1999
 */
 @ApiOperation(value = "文件上傳")
 @PostMapping("upload")
 public JSONObject upload(@RequestParam("file") MultipartFile file) {
 JSONObject jsonObject = new JSONObject();
 if (file != null) {
 String returnFileUrl = fileUploadService.upload(file);
 if (returnFileUrl.equals("error")) {
 jsonObject.put("error", "文件上傳失??!");
 return jsonObject;
 }
 jsonObject.put("success", "文件上傳成功!");
 jsonObject.put("returnFileUrl", returnFileUrl);
 return jsonObject;
 } else {
 jsonObject.put("error", "文件上傳失敗!");
 return jsonObject;
 }
 }

 /*
 * 文件下載api
 * @param: fileName
 * @param: response
 * @return: com.alibaba.fastjson.JSONObject
 * @create: 2020/10/31 17:35
 * @author: csp1999
 */
 @ApiOperation(value = "文件下載")
 @GetMapping(value = "download/{fileName}")
 public JSONObject download(@PathVariable("fileName") String fileName, HttpServletResponse response) throws Exception {
 JSONObject jsonObject = new JSONObject();

 String status = fileUploadService.download(fileName, response);
 if (status.equals("error")) {
 jsonObject.put("error", "文件下載失??!");
 return jsonObject;
 } else {
 jsonObject.put("success", "文件下載成功!");
 return jsonObject;
 }
 }

 /*
 * 文件刪除api
 * @param: fileName
 * @return: com.alibaba.fastjson.JSONObject
 * @create: 2020/10/31 17:35
 * @author: csp1999
 */
 @ApiOperation(value = "文件刪除")
 @GetMapping("/delete/{fileName}")
 public JSONObject DeleteFile(@PathVariable("fileName") String fileName) {
 JSONObject jsonObject = new JSONObject();

 String status = fileUploadService.delete(fileName);
 if (status.equals("error")) {
 jsonObject.put("error", "文件刪除失??!");
 return jsonObject;
 } else {
 jsonObject.put("success", "文件刪除成功!");
 return jsonObject;
 }
 }
}

4.運(yùn)行項(xiàng)目測(cè)試API接口

本機(jī)訪(fǎng)問(wèn):http://localhost:8083/swagger-ui.html

在這里插入圖片描述

測(cè)試上傳:

在這里插入圖片描述

結(jié)果如圖:

在這里插入圖片描述

如果說(shuō)明上傳成功,我們來(lái)看一下這個(gè)鏈接能不能訪(fǎng)問(wèn)到:

在這里插入圖片描述
在這里插入圖片描述

上傳成功!

到此這篇關(guān)于springboot操作阿里云OSS實(shí)現(xiàn)文件上傳,下載,刪除功能的文章就介紹到這了,更多相關(guān)springboot文件上傳下載刪除內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis-plus3.4.3下使用lambdaQuery報(bào)錯(cuò)解決

    Mybatis-plus3.4.3下使用lambdaQuery報(bào)錯(cuò)解決

    最近在使用lambdaQuery().eq(CommonUser::getOpenId, openId).one()進(jìn)行查詢(xún)報(bào)錯(cuò),本文主要介紹了Mybatis-plus3.4.3下使用lambdaQuery報(bào)錯(cuò)解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • 10個(gè)Java文件操作必備技巧分享

    10個(gè)Java文件操作必備技巧分享

    在我們?nèi)粘5拈_(kāi)發(fā)中,文件操作是一個(gè)非常重要的主題。文件讀寫(xiě)、文件復(fù)制、任意位置讀寫(xiě)、緩存等技巧都是我們必須要掌握的。本文為大家整理了10個(gè)實(shí)用的文件操作技巧,希望對(duì)大家有所幫助
    2023-04-04
  • Java如何實(shí)現(xiàn)遠(yuǎn)程文件下載到本地目錄

    Java如何實(shí)現(xiàn)遠(yuǎn)程文件下載到本地目錄

    本文介紹了如何使用Java來(lái)實(shí)現(xiàn)遠(yuǎn)程文件的下載功能,主要通過(guò)HTTPS路徑下載文件到本地目錄,詳細(xì)介紹了相關(guān)代碼和測(cè)試步驟,并提供了實(shí)際案例供參考,本文旨在幫助需要實(shí)現(xiàn)文件下載功能的開(kāi)發(fā)者快速掌握核心技術(shù)
    2024-10-10
  • Windows系統(tǒng)編寫(xiě)bat腳本啟動(dòng)、停止及重啟Java服務(wù)jar包

    Windows系統(tǒng)編寫(xiě)bat腳本啟動(dòng)、停止及重啟Java服務(wù)jar包

    在bat文件中我們將編寫(xiě)一些代碼來(lái)運(yùn)行Java jar文件,下面這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)編寫(xiě)bat腳本啟動(dòng)、停止及重啟Java服務(wù)jar包的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • 這一次搞懂Spring的Bean實(shí)例化原理操作

    這一次搞懂Spring的Bean實(shí)例化原理操作

    這篇文章主要介紹了這一次搞懂Spring的Bean實(shí)例化原理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • 老生常談Eclipse中的BuildPath(必看篇)

    老生常談Eclipse中的BuildPath(必看篇)

    下面小編就為大家?guī)?lái)一篇老生常談Eclipse中的BuildPath(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Java基礎(chǔ)篇之反射機(jī)制詳解

    Java基礎(chǔ)篇之反射機(jī)制詳解

    本文詳細(xì)講解了Java基礎(chǔ)篇之反射機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • 解決程序包org.springframework.test.context不存在

    解決程序包org.springframework.test.context不存在

    這篇文章主要介紹了解決程序包org.springframework.test.context不存在的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java如何計(jì)算兩個(gè)時(shí)間段內(nèi)的工作日天數(shù)

    Java如何計(jì)算兩個(gè)時(shí)間段內(nèi)的工作日天數(shù)

    這篇文章主要介紹了Java如何計(jì)算兩個(gè)時(shí)間段內(nèi)的工作日天數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • java實(shí)現(xiàn)在線(xiàn)預(yù)覽--poi實(shí)現(xiàn)word、excel、ppt轉(zhuǎn)html的方法

    java實(shí)現(xiàn)在線(xiàn)預(yù)覽--poi實(shí)現(xiàn)word、excel、ppt轉(zhuǎn)html的方法

    這篇文章主要介紹了java實(shí)現(xiàn)在線(xiàn)預(yù)覽--poi實(shí)現(xiàn)word、excel、ppt轉(zhuǎn)html的方法,本文需要引入poi的jar包給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2019-09-09

最新評(píng)論

南宁市| 张掖市| 侯马市| 冷水江市| 黄大仙区| 达日县| 达孜县| 连平县| 巢湖市| 马边| 瑞丽市| 丹棱县| 亳州市| 秭归县| 枣强县| 溆浦县| 汉寿县| 乡城县| 东兴市| 建始县| 昌图县| 澳门| 津南区| 深圳市| 驻马店市| 眉山市| 德安县| 泗阳县| 南安市| 永丰县| 缙云县| 保德县| 柳江县| 石林| 沅江市| 青田县| 岳阳县| 金山区| 罗江县| 荣成市| 岚皋县|