我如何从 java spring-boot AZURE 功能中的资源文件夹中读取任何文件?
How i can read any file from resources folder in java spring-boot AZURE function?
我正在使用 spring 启动编写一个 azure 函数,我想从资源文件夹中读取一个文件,但每次都出现空指针异常。
请帮我解决这个问题?
要么我必须将文件放在 blob 存储中,要么 azure 函数中有其他东西可以使用 java spring 启动应用程序读取文件?
下面是我的处理程序 class:
public class FunctionHandler extends AzureSpringBootRequestHandler {
@FunctionName("generateSignature")
public HttpResponseMessage execute(@HttpTrigger(name = "request", methods = { HttpMethod.GET,
HttpMethod.POST }, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<User>> request,
ExecutionContext context) throws InvalidKeyException, NoSuchAlgorithmException,
InvalidKeySpecException, SignatureException, IOException {
User user = request.getBody().filter((u -> u.getName() != null)).orElseGet(() -> new User(request
.getQueryParameters()
.getOrDefault("name", "<no name supplied> please provide a name as "
+ "either a query string parameter or in a POST body")));
context.getLogger().info("Greeting user name: " + user.getName());
try {
InputStream resourceInputStream = new FileInputStream(
FunctionHandler.class.getClassLoader().getResource("").getPath()
+ "../../src/main/java/com/tomtom/resources/private_key.der");
DataInputStream dis = new DataInputStream(resourceInputStream);
byte[] privateBytes = new byte[resourceInputStream.available()];
dis.readFully(privateBytes);
dis.close();
PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(privateBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPrivateKey privateKey = (RSAPrivateKey) keyFactory.generatePrivate(privSpec);
Signature s = Signature.getInstance("SHA256withRSA");
s.initSign(privateKey);
s.update(user.getName().getBytes("UTF-8"));
byte[] binarySignature = s.sign();
String signature = DatatypeConverter.printBase64Binary(binarySignature);
context.getLogger().info("sign is: " + signature);
} catch (IOException e) {
e.printStackTrace();
}
return request.createResponseBuilder(HttpStatus.OK).body(handleRequest(user, context))
.header("Content-Type", "application/json").build();
}
}
尝试使用此代码:
InputStream resourceInputStream = new FileInputStream(HelloFunction.class.getClassLoader().getResource("").getPath()+"../../src/main/java/com/example/resources/hello.json");
我的源代码结构如下:
更新:
String pathToResources = "hello.json";
// this is the path within the jar file
InputStream input = HelloHandler.class.getResourceAsStream("/resources/" + pathToResources);
// here is inside IDE
if (input == null) {
input = HelloHandler.class.getClassLoader().getResourceAsStream(pathToResources);
}
// convert InputStream to String
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = input.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
System.out.println(result.toString("UTF-8"));
我正在使用 spring 启动编写一个 azure 函数,我想从资源文件夹中读取一个文件,但每次都出现空指针异常。 请帮我解决这个问题? 要么我必须将文件放在 blob 存储中,要么 azure 函数中有其他东西可以使用 java spring 启动应用程序读取文件?
下面是我的处理程序 class:
public class FunctionHandler extends AzureSpringBootRequestHandler
@FunctionName("generateSignature")
public HttpResponseMessage execute(@HttpTrigger(name = "request", methods = { HttpMethod.GET,
HttpMethod.POST }, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<User>> request,
ExecutionContext context) throws InvalidKeyException, NoSuchAlgorithmException,
InvalidKeySpecException, SignatureException, IOException {
User user = request.getBody().filter((u -> u.getName() != null)).orElseGet(() -> new User(request
.getQueryParameters()
.getOrDefault("name", "<no name supplied> please provide a name as "
+ "either a query string parameter or in a POST body")));
context.getLogger().info("Greeting user name: " + user.getName());
try {
InputStream resourceInputStream = new FileInputStream(
FunctionHandler.class.getClassLoader().getResource("").getPath()
+ "../../src/main/java/com/tomtom/resources/private_key.der");
DataInputStream dis = new DataInputStream(resourceInputStream);
byte[] privateBytes = new byte[resourceInputStream.available()];
dis.readFully(privateBytes);
dis.close();
PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(privateBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPrivateKey privateKey = (RSAPrivateKey) keyFactory.generatePrivate(privSpec);
Signature s = Signature.getInstance("SHA256withRSA");
s.initSign(privateKey);
s.update(user.getName().getBytes("UTF-8"));
byte[] binarySignature = s.sign();
String signature = DatatypeConverter.printBase64Binary(binarySignature);
context.getLogger().info("sign is: " + signature);
} catch (IOException e) {
e.printStackTrace();
}
return request.createResponseBuilder(HttpStatus.OK).body(handleRequest(user, context))
.header("Content-Type", "application/json").build();
}
}
尝试使用此代码:
InputStream resourceInputStream = new FileInputStream(HelloFunction.class.getClassLoader().getResource("").getPath()+"../../src/main/java/com/example/resources/hello.json");
我的源代码结构如下:
更新:
String pathToResources = "hello.json";
// this is the path within the jar file
InputStream input = HelloHandler.class.getResourceAsStream("/resources/" + pathToResources);
// here is inside IDE
if (input == null) {
input = HelloHandler.class.getClassLoader().getResourceAsStream(pathToResources);
}
// convert InputStream to String
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = input.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
System.out.println(result.toString("UTF-8"));