首页 > 其他分享 >aliyun oss操作汇总

aliyun oss操作汇总

时间:2023-01-02 15:34:48浏览次数:56  
标签:core java jar oss 汇总 41 aliyun org 9.0

STS介绍

阿里云STS (Security Token Service) 是为阿里云账号(或RAM用户)提供短期访问权限管理的云服务。通过STS,您可以为联盟用户(您的本地账号系统所管理的用户)颁发一个自定义时效和访问权限的访问凭证。联盟用户可以使用STS短期访问凭证直接调用阿里云服务API,或登录阿里云管理控制台操作被授权访问的资源。

访问点

STS的默认访问点地址是: ​​https://sts.aliyuncs.com​​ ,用户必须使用https接入访问点。

术语表

 

术语

中文

说明

Federated identity

联盟用户身份

联盟用户的身份认证由客户自己管理

Policy

访问策略

用来描述授权策略的一种描述语言

Grantor

授权者

授权令牌的颁发者(云账号或RAM用户)

Name

被授权者

授权令牌的使用者(即联盟用户)

​https://help.aliyun.com/document_detail/28756.html?spm=a2c4g.11186623.2.9.4d4f412fzjwgui#reference-ong-5nv-xdb​

授权访问

使用STS进行临时授权

OSS可以通过阿里云STS (Security Token Service) 进行临时授权访问。阿里云STS是为云计算用户提供临时访问令牌的Web服务。通过STS,您可以为第三方应用或子用户(即用户身份由您自己管理的用户)颁发一个自定义时效和权限的访问凭证。STS更详细的解释请参见​​STS介绍​​。

STS的优势如下:

  • 您无需透露您的长期密钥(AccessKey)给第三方应用,只需生成一个访问令牌并将令牌交给第三方应用。您可以自定义这个令牌的访问权限及有效期限。
  • 您无需关心权限撤销问题,访问令牌过期后自动失效。

使用STS访问OSS的流程请参见开发指南中的​​RAM和STS应用场景实践​​。

使用签名URL上传文件

以下代码用于使用签名URL上传文件:

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
String objectName = "<yourObjectName>";

// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

// 生成签名URL。
Date expiration = DateUtil.parseRfc822Date("Thu, 19 Mar 2019 18:00:00 GMT");
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.PUT);
// 设置过期时间。
request.setExpiration(expiration);
// 设置Content-Type。
request.setContentType("application/octet-stream");
// 添加用户自定义元信息。
request.addUserMetadata("author", "aliy");
// 生成签名URL(HTTP PUT请求)。
URL signedUrl = ossClient.generatePresignedUrl(request);
System.out.println("signed url for putObject: " + signedUrl);

// 使用签名URL发送请求。
File f = new File("<yourLocalFile>");
FileInputStream fin = new FileInputStream(f);
// 添加PutObject请求头。
Map<String, String> customHeaders = new HashMap<String, String>();
customHeaders.put("Content-Type", "application/octet-stream");
customHeaders.put("x-oss-meta-author", "aliy");

PutObjectResult result = ossClient.putObject(signedUrl, fin, f.length(), customHeaders);

// 关闭OSSClient。
ossClient.shutdown();

 

​ https://help.aliyun.com/document_detail/32016.html​

错误码大全
​​​https://error-center.aliyun.com/status/product/Oss​

 

 

// endpoint以杭州为例,其它region请按实际情况填写
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// accessKey请登录https://ak-console.aliyun.com/#/查看
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String content = "Hello OSS";
// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
AppendObjectRequest appendObjectRequest = new AppendObjectRequest("<yourBucketName>",
"<yourKey>", new ByteArrayInputStream(content.getBytes()));
// 第一次追加
appendObjectRequest.setPosition(0L);
AppendObjectResult appendObjectResult = ossClient.appendObject(appendObjectRequest);
// 第二次追加
appendObjectRequest.setPosition(appendObjectResult.getNextPosition());
appendObjectResult = ossClient.appendObject(appendObjectRequest);
// 第三次追加
appendObjectRequest.setPosition(appendObjectResult.getNextPosition());
appendObjectResult = ossClient.appendObject(appendObjectRequest);
// 关闭client
ossClient.shutdown();

​https://help.aliyun.com/document_detail/32013.html​

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.AppendObjectRequest;
import com.aliyun.oss.model.AppendObjectResult;
import com.aliyun.oss.model.OSSObject;

/**
* This sample demonstrates how to upload an object by append mode
* to Aliyun OSS using the OSS SDK for Java.
*/
public class AppendObjectSample {

private static String endpoint = "*** Provide OSS endpoint ***";
private static String accessKeyId = "*** Provide your AccessKeyId ***";
private static String accessKeySecret = "*** Provide your AccessKeySecret ***";

private static String bucketName = "*** Provide bucket name ***";
private static String key = "*** Provide key ***";

public static void main(String[] args) throws IOException {
/*
* Constructs a client instance with your account for accessing OSS
*/
OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);

try {
/*
* Append an object from specfied input stream, keep in mind that
* position should be set to zero at first time.
*/
String content = "Thank you for using Aliyun Object Storage Service";
InputStream instream = new ByteArrayInputStream(content.getBytes());
Long firstPosition = 0L;
System.out.println("Begin to append object at position(" + firstPosition + ")");
AppendObjectResult appendObjectResult = client.appendObject(
new AppendObjectRequest(bucketName, key, instream).withPosition(0L));
System.out.println("\tNext position=" + appendObjectResult.getNextPosition() +
", CRC64=" + appendObjectResult.getObjectCRC() + "\n");

/*
* Continue to append the object from specfied file descriptor at last position
*/
Long nextPosition = appendObjectResult.getNextPosition();
System.out.println("Continue to append object at last position(" + nextPosition + "):");
appendObjectResult = client.appendObject(
new AppendObjectRequest(bucketName, key, createTempFile())
.withPosition(nextPosition));
System.out.println("\tNext position=" + appendObjectResult.getNextPosition() +
", CRC64=" + appendObjectResult.getObjectCRC());

/*
* View object type of the appendable object
*/
OSSObject object = client.getObject(bucketName, key);
System.out.println("\tObject type=" + object.getObjectMetadata().getObjectType() + "\n");
// Do not forget to close object input stream if not use it any more
object.getObjectContent().close();

/*
* Delete the appendable object
*/
System.out.println("Deleting an appendable object");
client.deleteObject(bucketName, key);

} 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.getErrorCode());
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 {
/*
* Do not forget to shut down the client finally to release all allocated resources.
*/
client.shutdown();
}
}

private static File createTempFile() throws IOException {
File file = File.createTempFile("oss-java-sdk-", ".txt");
file.deleteOnExit();

Writer writer = new OutputStreamWriter(new FileOutputStream(file));
writer.write("abcdefghijklmnopqrstuvwxyz\n");
writer.write("0123456789011234567890\n");
writer.close();

return file;
}
}

 

 

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package samples;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.PutObjectRequest;

/**
* This sample demonstrates how to upload/download an object to/from
* Aliyun OSS using the OSS SDK for Java.
*/
public class SimpleGetObjectSample {

private static String endpoint = "*** Provide OSS endpoint ***";
private static String accessKeyId = "*** Provide your AccessKeyId ***";
private static String accessKeySecret = "*** Provide your AccessKeySecret ***";

private static String bucketName = "*** Provide bucket name ***";
private static String key = "*** Provide key ***";

public static void main(String[] args) throws IOException {
/*
* Constructs a client instance with your account for accessing OSS
*/
OSS client = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

try {

/**
* Note that there are two ways of uploading an object to your bucket, the one
* by specifying an input stream as content source, the other by specifying a file.
*/

/*
* Upload an object to your bucket from an input stream
*/
System.out.println("Uploading a new object to OSS from an input stream\n");
String content = "Thank you for using Aliyun Object Storage Service";
client.putObject(bucketName, key, new ByteArrayInputStream(content.getBytes()));

/*
* Upload an object to your bucket from a file
*/
System.out.println("Uploading a new object to OSS from a file\n");
client.putObject(new PutObjectRequest(bucketName, key, createSampleFile()));

/*
* Download an object from your bucket
*/
System.out.println("Downloading an object");
OSSObject object = client.getObject(new GetObjectRequest(bucketName, key));
System.out.println("Content-Type: " + object.getObjectMetadata().getContentType());
displayTextInputStream(object.getObjectContent());

} 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.getErrorCode());
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 {
/*
* Do not forget to shut down the client finally to release all allocated resources.
*/
client.shutdown();
}
}

private static File createSampleFile() throws IOException {
File file = File.createTempFile("oss-java-sdk-", ".txt");
file.deleteOnExit();

Writer writer = new OutputStreamWriter(new FileOutputStream(file));
writer.write("abcdefghijklmnopqrstuvwxyz\n");
writer.write("0123456789011234567890\n");
writer.close();

return file;
}

private static void displayTextInputStream(InputStream input) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
while (true) {
String line = reader.readLine();
if (line == null) break;

System.out.println("\t" + line);
}
System.out.println();

reader.close();
}

}

​https://github.com/aliyun/aliyun-oss-java-sdk/blob/master/src/samples/SimpleGetObjectSample.java?spm=5176.12026607.tutorial.1.9c7732e2bQ2hBA&file=SimpleGetObjectSample.java​

 

​https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11186623.6.662.2cb51000luQAlv​

 

在OSS控制台设置了CORS规则以后,通过JS程序去调用的时候报No ‘Access-Control-Allow-Origin’ header is present on the requested resource,可以通过下面的思路来进行下排查:

1. 确认检查CORS规则是否设置好了,是否设置正确,正确的设置方法如下图:

aliyun oss操作汇总_System

 

2. CORS设置都正确的话,那就检查AllowedHeader的设置,一般建议设置为*,设置方法如下: 

aliyun oss操作汇总_ide_02

 

​https://help.aliyun.com/knowledge_detail/39518.html​

 

参数

是否必须

说明

来源


指定允许的跨域请求的来源。允许多条匹配规则,多条规则需换行填写。每条匹配规则允许使用最多一个星号(*)通配符。单独填写星号(*)通配符,表示允许所有来源的跨域请求。

允许 Methods


指定允许的跨域请求方法。

允许 Headers


指定允许的跨域请求的响应头。大小写不敏感,允许多条匹配规则,多条规则需换行填写。每条匹配规则最多使用一个星号(*)通配符。建议没有特殊需求的情况下设置为星号(*)。

暴露 Headers


指定允许用户从应用程序中访问的响应头(例如,一个Javascript 的 XMLHttpRequest对象)。不允许使用星号(*)通配符。

缓存时间


指定浏览器对特定资源的预取(OPTIONS)请求返回结果的缓存时间。

 

说明 每个存储空间最多可以配置10条规则。

​https://help.aliyun.com/document_detail/31903.html?spm=a2c4g.11186623.2.14.5c73c451QhufyK#concept-pbw-4df-vdb​

 

 

 

设置跨域访问

跨域访问,或者说JavaScript的跨域访问问题,是浏览器出于安全考虑而设置的一个限制,即同源策略。当来自于A网站的页面中的JavaScript代码希望访问B网站的时候,浏览器会拒绝该访问,因为A、B两个网站是属于不同的域。

在实际应用中,经常会有跨域访问的需求,比如用户的网站www.a.com,后端使用了OSS。在网页中提供了使用JavaScript实现的上传功能,但是在该页面中,只能向www.a.com发送请求,向其他网站发送的请求都会被浏览器拒绝。这样就导致用户上传的数据必须从www.a.com中转。如果设置了跨域访问的话,用户就可以直接上传到OSS而无需从www.a.com中转。

跨域资源共享的实现

跨域资源共享(Cross-Origin Resource Sharing),简称CORS,是HTML5提供的标准跨域解决方案,OSS支持CORS标准来实现跨域访问。具体的CORS规则可以参考​​W3C CORS规范​​。其实现如下:

  1. CORS通过HTTP请求中附带Origin的Header来表明自己来源域,比如上面那个例子,Origin的Header就是www.a.com。
  2. 服务器端接收到这个请求之后,会根据一定的规则判断是否允许该来源域的请求。如果允许,服务器在返回的响应中会附带上Access-Control-Allow-Origin这个Header,内容为www.a.com来表示允许该次跨域访问。如果服务器允许所有的跨域请求,将Access-Control-Allow-Origin的Header设置为*即可。
  3. 浏览器根据是否返回了对应的Header来决定该跨域请求是否成功,如果没有附加对应的Header,浏览器将会拦截该请求。如果是非简单请求,浏览器会先发送一个OPTIONS请求来获取服务器的CORS配置,如果服务器不支持接下来的操作,浏览器也会拦截接下来的请求。

OSS提供了CORS规则的配置,从而根据需求允许或者拒绝相应的跨域请求。该规则是配置在Bucket级别的。详情可以参考​​PutBucketCORS​​。

细节分析

  • CORS相关的Header附加等都是浏览器自动完成的,用户不需要有任何额外的操作。CORS操作也只在浏览器环境下有意义。
  • CORS请求的通过与否和OSS的身份验证是完全独立的,即OSS的CORS规则仅仅是用来决定是否附加CORS相关的Header的一个规则。是否拦截该请求完全由浏览器决定。
  • 使用跨域请求的时候需要关注浏览器是否开启了Cache功能。当运行在同一个浏览器上分别来源于www.a.com和www.b.com的两个页面都同时请求同一个跨域资源的时候,如果www.a.com的请求先到达服务器,服务器将资源带上Access-Control-Allow-Origin的Header为www.a.com返回给用户。这个时候www.b.com又发起了请求,浏览器会将Cache的上一次请求返回给用户,此时Header的内容和CORS的要求不匹配,就会导致后面的请求失败。

​https://help.aliyun.com/document_detail/31870.html?spm=a2c4g.11186623.2.10.7ecc6a68CpGZAQ#concept-bwn-tjd-5db​

本文介绍如何进行跨域资源共享。

跨域资源共享(Cross-origin resource sharing,简称CORS)允许Web端的应用程序访问不属于本域的资源。OSS提供跨域资源共享接口,方便您控制跨域访问的权限。

更多关于跨域资源共享的介绍,请参见开发指南中的​​设置跨域访问​​​和API参考中​​PutBucketcors​​。

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";

// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

SetBucketCORSRequest request = new SetBucketCORSRequest(bucketName);

// 跨域资源共享规则的容器,每个存储空间最多允许10条规则。
ArrayList<CORSRule> putCorsRules = new ArrayList<CORSRule>();

CORSRule corRule = new CORSRule();

ArrayList<String> allowedOrigin = new ArrayList<String>();
// 指定允许跨域请求的来源。
allowedOrigin.add( "http://www.b.com");

ArrayList<String> allowedMethod = new ArrayList<String>();
// 指定允许的跨域请求方法(GET/PUT/DELETE/POST/HEAD)。
allowedMethod.add("GET");

ArrayList<String> allowedHeader = new ArrayList<String>();
// 是否允许预取指令(OPTIONS)中Access-Control-Request-Headers头中指定的Header。
allowedHeader.add("x-oss-test");

ArrayList<String> exposedHeader = new ArrayList<String>();
// 指定允许用户从应用程序中访问的响应头。
exposedHeader.add("x-oss-test1");
// AllowedOrigins和AllowedMethods最多支持一个星号(*)通配符。星号(*)表示允许所有的域来源或者操作。
corRule.setAllowedMethods(allowedMethod);
corRule.setAllowedOrigins(allowedOrigin);
// AllowedHeaders和ExposeHeaders不支持通配符。
corRule.setAllowedHeaders(allowedHeader);
corRule.setExposeHeaders(exposedHeader);
// 指定浏览器对特定资源的预取(OPTIONS)请求返回结果的缓存时间,单位为秒。
corRule.setMaxAgeSeconds(10);

// 最多允许10条规则。
putCorsRules.add(corRule);
// 已存在的规则将被覆盖。
request.setCorsRules(putCorsRules);
ossClient.setBucketCORS(request);

// 关闭OSSClient。
ossClient.shutdown();

​https://help.aliyun.com/document_detail/32018.html?spm=a2c4g.11186623.6.690.676f2eaaWRN8fZ​

获取跨域资源共享规则

以下代码用于获取跨域资源共享规则:

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";

// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

ArrayList<CORSRule> corsRules;
// 获取跨域资源共享规则列表。
corsRules = (ArrayList<CORSRule>) ossClient.getBucketCORSRules(bucketName);
for (CORSRule rule : corsRules) {
for (String allowedOrigin1 : rule.getAllowedOrigins()) {
// 获取允许的跨域请求源。
System.out.println(allowedOrigin1);
}

for (String allowedMethod1 : rule.getAllowedMethods()) {
// 获取允许的跨域请求方法。
System.out.println(allowedMethod1);
}

if (rule.getAllowedHeaders().size() > 0){
for (String allowedHeader1 : rule.getAllowedHeaders()) {
// 获取允许的头部列表。
System.out.println(allowedHeader1);
}
}

if (rule.getExposeHeaders().size() > 0) {
for (String exposeHeader : rule.getExposeHeaders()) {
// 获取允许的头部。
System.out.println(exposeHeader);
}
}

if ( null != rule.getMaxAgeSeconds()) {
System.out.println(rule.getMaxAgeSeconds());
}
}

// 关闭OSSClient。
ossClient.shutdown();

​https://help.aliyun.com/document_detail/32018.html?spm=a2c4g.11186623.6.690.676f2eaaWRN8fZ​

签名错误 (signature not match)

签名错误建议您排查以下问题:

  • 参考​​在Header中包含签名​​中的签名方法以及示例,切记其中的\n是不能少的。
  • URL中出现特殊字符“+”等时,会有浏览器无法识别的情况,需要对签名做url coding,对“+”等做url编码,将+转换为“%2b”,浏览器才能识别。
  • 使用如下的签名验证工具自行查看签名的过程,请您参考:​​https://bbs.aliyun.com/read/233851.html​

推荐直接使用我们提供的SDK,这样避免您自己进行签名,我们帮您直接实现了签名的过程,请您参考:​​这里​​。

​https://help.aliyun.com/knowledge_detail/66098.html?spm=a2c4g.11186631.2.8.6e892a8dwb2Hk5​

java实现生成url签名的代码示例

 

生成签名以后的URL的示例代码如下:

// Generate a presigned URL

Date expires = new Date (new Date().getTime() + 1000 * 60); // 1 minute to expire

GeneratePresignedUrlRequest generatePresignedUrlRequest =

new GeneratePresignedUrlRequest(bucketName, key);

generatePresignedUrlRequest.setExpiration(expires);

URL url = client.generatePresignedUrl(generatePresignedUrlRequest);

System.out.println(url.toString());

这段代码假定指定bucketName和key的Object已经上传到OSS,用户可以根据修改设定expires,即过期时间。更详细的操作可以参考OSSClient#generatePresignedUrl方法和GeneratePresignedUrlRequest类的帮助。

 详细Java SDK文档可以参考:​​点击查看​

​https://help.aliyun.com/knowledge_list/51639.html?spm=a2c4g.11186623.3.3.697c7681h465JK​

@Slf4j
@Service
public class AliOSSServiceImpl implements OSSService {

@Autowired
private OssConfig ossConfig;

@Override
public UploadOSSVO generatePresignedUrl(UploadOSSReq req) {
String bucketName = ossConfig.getBucket();
OSSClient ossClient = null;
try {
ossClient = getOssClient();
// 设置文件路径和名称
// https://filetest.gongbangbang.com/resources/u/2019/02/11/ea05ef6c4fce4e04a910fb38a2643a1fBJxmpf.jpg
String key = getObjectName(req);
// 创建请求。
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, key);
// HttpMethod为PUT。
generatePresignedUrlRequest.setMethod(HttpMethod.PUT);//要使用put方法进行上传
// // 添加用户自定义元信息。
generatePresignedUrlRequest.addUserMetadata("author", "jackie");
// 添加Content-Type。
generatePresignedUrlRequest.setContentType("application/octet-stream");//要指定HttpHeader
// 设置URL过期时间为1小时。
generatePresignedUrlRequest.setExpiration(LocalDateTime.now().plusHours(1).toDate());
// 上传文件
URL url = ossClient.generatePresignedUrl(generatePresignedUrlRequest);
String query = url.getQuery();
return new UploadOSSVO(ossConfig.getOssResourceUrl(key) + "?" + query);
} catch (OSSException oe) {
log.error("生成url失败 OSSException {}", oe.getMessage(), oe);
throw oe;
} catch (ClientException ce) {
log.error("生成url失败 ClientException {}", ce.getErrorMessage());
throw ce;
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}


/**
* 上传文件。
*
* @param file 需要上传的文件路径
* @return 如果上传的文件是图片的话,会返回图片的"URL",如果非图片的话会返回"非图片,不可预览。文件路径为:+文件路径"
*/
@Override
public String upLoad(File file) throws IOException {
log.info("------OSS文件上传开始--------{}", file.getName());
Assert.notNull(file, "往ali oss 上传的文件为空");
Assert.isTrue(file.exists(), "往ali oss上传的文件不存在");
String bucketName = ossConfig.getBucket();
OSSClient ossClient = null;
try {
ossClient = getOssClient();
// 设置文件路径和名称
// https://filetest.gongbangbang.com/resources/u/2019/02/11/ea05ef6c4fce4e04a910fb38a2643a1fBJxmpf.jpg
String key = getObjectName(new UploadOSSReq(FilenameUtils.getExtension(file.getName())));
// 上传文件
PutObjectResult putObjectResult = ossClient.putObject(bucketName, key, file);
String ossResourceUrl = ossConfig.getOssResourceUrl(key);
if (putObjectResult != null) {
log.info("PutObjectResult:{}", JSON.toJSONString(putObjectResult));
// 设置权限(公开读)
ossClient.setObjectAcl(bucketName, key, CannedAccessControlList.PublicRead);
log.info("------OSS文件上传成功------ {}", ossResourceUrl);
FileUtils.deleteQuietly(file);
return ossResourceUrl;
}
log.warn("OSS文件上传失败。 putObjectResult is null");
throw new IOException("OSS文件上传失败。putObjectResult is null");
} catch (OSSException oe) {
log.error(oe.getMessage(), oe);
throw oe;
} catch (ClientException ce) {
log.error(ce.getErrorMessage(), ce);
throw ce;
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}


/**
* 上传的资源在OSS上的路径
*
* @param req
* @return
*/
private String getObjectName(UploadOSSReq req) {
return ossConfig.getPath() + LocalDate.now().toString("yyyy/MM/dd") + "/" + RandomUtils.getRandomFileName() + req.getSuffix();
}

/**
* 初始化OSS Client对象
*
* @return
*/
private OSSClient getOssClient() {
OSSClient ossClient = new OSSClient(ossConfig.getEndpoint(), ossConfig.getAccessId(), ossConfig.getAccessKey());
// 判断容器是否存在,不存在就创建
String bucketName = ossConfig.getBucket();
if (!ossClient.doesBucketExist(bucketName)) {
ossClient.createBucket(bucketName);
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
ossClient.createBucket(createBucketRequest);
}
return ossClient;
}
}

 

2021-01-07 21:41:37.727  WARN 93137 --- [nio-8080-exec-1] com.aliyun.oss                           : [Server]Unable to execute HTTP request: 返回结果无效,无法解析。
[ErrorCode]: InvalidResponse
[RequestId]: 5FF70F9002A8173932732D14
[HostId]: null
[ResponseError]:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<RequestId>5FF70F9002A8173932732D14</RequestId>
<HostId>zkh360-onestop.oss-cn-hangzhou.aliyuncs.com</HostId>
<OSSAccessKeyId>LTAIsWAx4UFNO9rt</OSSAccessKeyId>
<SignatureProvided>dr5v2sZWXu9jlIbIVS4ncICVoSE=</SignatureProvided>
<StringToSign>PUT

application/pdf
Thu, 07 Jan 2021 13:41:36 GMT
x-oss-meta-filename:�?��?3011625194-�?�货-�?��?��??货�??1011837630 2.pdf
x-oss-traffic-limit:8388608
/zkh360-onestop/495a2b0c207f0438aaf2b029cf8274bb.pdf</StringToSign>
<StringToSignBytes>50 55 54 0A 0A 61 70 70 6C 69 63 61 74 69 6F 6E 2F 70 64 66 0A 54 68 75 2C 20 30 37 20 4A 61 6E 20 32 30 32 31 20 31 33 3A 34 31 3A 33 36 20 47 4D 54 0A 78 2D 6F 73 73 2D 6D 65 74 61 2D 66 69 6C 65 6E 61 6D 65 3A E5 3F A4 E9 AA 3F 33 30 31 31 36 32 35 31 39 34 2D E6 3F A2 E8 B4 A7 2D E5 3F BD E7 3F B5 E9 3F 3F E8 B4 A7 E5 3F 3F 31 30 31 31 38 33 37 36 33 30 20 32 2E 70 64 66 0A 78 2D 6F 73 73 2D 74 72 61 66 66 69 63 2D 6C 69 6D 69 74 3A 38 33 38 38 36 30 38 0A 2F 7A 6B 68 33 36 30 2D 6F 6E 65 73 74 6F 70 2F 34 39 35 61 32 62 30 63 32 30 37 66 30 34 33 38 61 61 66 32 62 30 32 39 63 66 38 32 37 34 62 62 2E 70 64 66 </StringToSignBytes>
</Error>

2021-01-07 21:41:37.752 ERROR 93137 --- [nio-8080-exec-1] c.z.z.f.z.controller.AliFileController : ali 文件上传失败 aliFileUploadVo:{"appName":"onestop"} l msg:返回结果无效,无法解析。
[ErrorCode]: InvalidResponse
[RequestId]: 5FF70F9002A8173932732D14
[HostId]: null
[ResponseError]:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<RequestId>5FF70F9002A8173932732D14</RequestId>
<HostId>zkh360-onestop.oss-cn-hangzhou.aliyuncs.com</HostId>
<OSSAccessKeyId>LTAIsWAx4UFNO9rt</OSSAccessKeyId>
<SignatureProvided>dr5v2sZWXu9jlIbIVS4ncICVoSE=</SignatureProvided>
<StringToSign>PUT

application/pdf
Thu, 07 Jan 2021 13:41:36 GMT
x-oss-meta-filename:�?��?3011625194-�?�货-�?��?��??货�??1011837630 2.pdf
x-oss-traffic-limit:8388608
/zkh360-onestop/495a2b0c207f0438aaf2b029cf8274bb.pdf</StringToSign>
<StringToSignBytes>50 55 54 0A 0A 61 70 70 6C 69 63 61 74 69 6F 6E 2F 70 64 66 0A 54 68 75 2C 20 30 37 20 4A 61 6E 20 32 30 32 31 20 31 33 3A 34 31 3A 33 36 20 47 4D 54 0A 78 2D 6F 73 73 2D 6D 65 74 61 2D 66 69 6C 65 6E 61 6D 65 3A E5 3F A4 E9 AA 3F 33 30 31 31 36 32 35 31 39 34 2D E6 3F A2 E8 B4 A7 2D E5 3F BD E7 3F B5 E9 3F 3F E8 B4 A7 E5 3F 3F 31 30 31 31 38 33 37 36 33 30 20 32 2E 70 64 66 0A 78 2D 6F 73 73 2D 74 72 61 66 66 69 63 2D 6C 69 6D 69 74 3A 38 33 38 38 36 30 38 0A 2F 7A 6B 68 33 36 30 2D 6F 6E 65 73 74 6F 70 2F 34 39 35 61 32 62 30 63 32 30 37 66 30 34 33 38 61 61 66 32 62 30 32 39 63 66 38 32 37 34 62 62 2E 70 64 66 </StringToSignBytes>
</Error>


com.aliyun.oss.OSSException: 返回结果无效,无法解析。
[ErrorCode]: InvalidResponse
[RequestId]: 5FF70F9002A8173932732D14
[HostId]: null
[ResponseError]:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<RequestId>5FF70F9002A8173932732D14</RequestId>
<HostId>zkh360-onestop.oss-cn-hangzhou.aliyuncs.com</HostId>
<OSSAccessKeyId>LTAIsWAx4UFNO9rt</OSSAccessKeyId>
<SignatureProvided>dr5v2sZWXu9jlIbIVS4ncICVoSE=</SignatureProvided>
<StringToSign>PUT

application/pdf
Thu, 07 Jan 2021 13:41:36 GMT
x-oss-meta-filename:�?��?3011625194-�?�货-�?��?��??货�??1011837630 2.pdf
x-oss-traffic-limit:8388608
/zkh360-onestop/495a2b0c207f0438aaf2b029cf8274bb.pdf</StringToSign>
<StringToSignBytes>50 55 54 0A 0A 61 70 70 6C 69 63 61 74 69 6F 6E 2F 70 64 66 0A 54 68 75 2C 20 30 37 20 4A 61 6E 20 32 30 32 31 20 31 33 3A 34 31 3A 33 36 20 47 4D 54 0A 78 2D 6F 73 73 2D 6D 65 74 61 2D 66 69 6C 65 6E 61 6D 65 3A E5 3F A4 E9 AA 3F 33 30 31 31 36 32 35 31 39 34 2D E6 3F A2 E8 B4 A7 2D E5 3F BD E7 3F B5 E9 3F 3F E8 B4 A7 E5 3F 3F 31 30 31 31 38 33 37 36 33 30 20 32 2E 70 64 66 0A 78 2D 6F 73 73 2D 74 72 61 66 66 69 63 2D 6C 69 6D 69 74 3A 38 33 38 38 36 30 38 0A 2F 7A 6B 68 33 36 30 2D 6F 6E 65 73 74 6F 70 2F 34 39 35 61 32 62 30 63 32 30 37 66 30 34 33 38 61 61 66 32 62 30 32 39 63 66 38 32 37 34 62 62 2E 70 64 66 </StringToSignBytes>
</Error>

at com.aliyun.oss.common.utils.ExceptionFactory.createOSSException(ExceptionFactory.java:110) ~[aliyun-sdk-oss-3.5.0.jar:na]
at com.aliyun.oss.common.utils.ExceptionFactory.createInvalidResponseException(ExceptionFactory.java:92) ~[aliyun-sdk-oss-3.5.0.jar:na]
at com.aliyun.oss.common.utils.ExceptionFactory.createInvalidResponseException(ExceptionFactory.java:81) ~[aliyun-sdk-oss-3.5.0.jar:na]
at com.aliyun.oss.internal.OSSErrorResponseHandler.handle(OSSErrorResponseHandler.java:72) ~[aliyun-sdk-oss-3.5.0.jar:na]
at com.aliyun.oss.common.comm.ServiceClient.handleResponse(ServiceClient.java:257) ~[aliyun-sdk-oss-3.5.0.jar:na]
at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:140) ~[aliyun-sdk-oss-3.5.0.jar:na]
at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:70) ~[aliyun-sdk-oss-3.5.0.jar:na]
at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:83) ~[aliyun-sdk-oss-3.5.0.jar:na]
at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:145) ~[aliyun-sdk-oss-3.5.0.jar:na]
at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:102) ~[aliyun-sdk-oss-3.5.0.jar:na]
at com.aliyun.oss.internal.OSSObjectOperation.writeObjectInternal(OSSObjectOperation.java:1061) ~[aliyun-sdk-oss-3.5.0.jar:na]
at com.aliyun.oss.internal.OSSObjectOperation.putObject(OSSObjectOperation.java:130) ~[aliyun-sdk-oss-3.5.0.jar:na]
at com.aliyun.oss.OSSClient.putObject(OSSClient.java:494) ~[aliyun-sdk-oss-3.5.0.jar:na]
at com.zkh360.zaf.file.zaffileserver.controller.AliFileController.aliSimpleUpload(AliFileController.java:109) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_261]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_261]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_261]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_261]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) [spring-web-5.3.2.jar:5.3.2]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) [spring-web-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) [spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) [spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) [spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) [spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) [spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) [spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.3.2.jar:5.3.2]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) [tomcat-embed-core-9.0.41.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.2.jar:5.3.2]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) [tomcat-embed-core-9.0.41.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) [spring-web-5.3.2.jar:5.3.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.2.jar:5.3.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.2.jar:5.3.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.2.jar:5.3.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.2.jar:5.3.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.2.jar:5.3.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.2.jar:5.3.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.2.jar:5.3.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.41.jar:9.0.41]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_261]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_261]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.41.jar:9.0.41]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_261]

2021-01-07 21:41:37.817 ERROR 93137 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: 文件上传失败] with root cause

java.lang.RuntimeException: 文件上传失败
at com.zkh360.zaf.file.zaffileserver.controller.AliFileController.aliSimpleUpload(AliFileController.java:115) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_261]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_261]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_261]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_261]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.2.jar:5.3.2]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.2.jar:5.3.2]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) ~[tomcat-embed-core-9.0.41.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) ~[spring-web-5.3.2.jar:5.3.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) [tomcat-embed-core-9.0.41.jar:9.0.41]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.41.jar:9.0.41]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_261]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_261]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.41.jar:9.0.41]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_261]

2021-01-07 21:42:33.871 INFO 93137 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'

Process finished with exit code 130 (interrupted by signal 2: SIGINT)

 



标签:core,java,jar,oss,汇总,41,aliyun,org,9.0
From: https://blog.51cto.com/u_15147537/5983732

相关文章

  • HHUACM2023寒假集训(低年级组)信息汇总
    第一周(1.2-1.8):基础算法题单链接:低年级组集训第一周:基础算法(一),低年级组集训第一周:基础算法(二)第二周(1.9-1.15):简单数学TODO第三周(1.16-1.22):数据结构基础TODO......
  • 人工智能相关赛事分享贴汇总
    引言从他人比赛经验中,总是可以学到很多东西我也不知道这是谁说的,反正从我的角度来看,这的确是对的。参加一场比赛,最直接的收获是自己在参与过程中针对不同的问题,做出......
  • 原创文章汇总
    从去年11.29开始今已经有223篇原创文章了。同时还写了很多热点文章,收到了大家的喜欢。戳此处查看:​​原创文章合集​​如果大家觉得我的文章不错,还可以关注我的个人公众......
  • 阿里云开通OSS存储服务详细流程
    文章目录​​学习文档​​​​一、购买资源包​​​​二、创建Bucket及目录​​​​三、创建用户,分配权限​​​​四、最终绑定PicGo来进行上传​​​​关于收费​​​​图......
  • 读loss.py
    阅读utils/loss.py,掌握YOLO算法的loss计算过程这个损失函数跟YOLO-V5的损失函数相同,最关键的函数是build_target。原理很抽象,代码更抽象。想要读懂耗时大概2~3天。由于学......
  • 如何播放无损音乐格式tak(Tom's lossless Audio Kompressor)?
    无损格式tak,全称Tom'slosslessAudioKompressorwindows下,下载TAKSDK:官方解码器解压后Applications文件夹里面有Tak.exe点击Decompress->AddFiles->Decompress......
  • sql根据团队树一级一级汇总统计
    ​ 1、需求描述    最近碰到了一个需求,是要统计各个团队的员工的销售金额,然后一级一级向上汇总。​编辑 架构团队树是类似于这种样子的,需要先算出每个员工的......
  • E. Cross Swapping-带权并查集cf1713
    E.CrossSwappinghttps://codeforces.ml/problemset/problem/1713/E题意给定n*n的矩阵每次可以选定第k行和第k列交换位置操作次数不限求最小字典序的矩阵思路让......
  • 【GNN】图神经网络学习小结 and 笔记汇总
    0.背景简述GNN的本质,是要学习网络中每个节点的表达的,这些潜在的表达对图中每个节点的“社交”关系进行了编码,把离散值的节点编码成稠密向量,后续可用于分类回归,或者作为下游......
  • VTK_Learning_VTK开发理论汇总
    一、VTK开发基础_智能指针与引用计数 二、VTK开发基础_vtkObject类深入分析 三、VTK管线机制_信息对象类VTKInformation 四、Pipeline管线执行模型 ......