Как я могу прочитать любой файл из папки ресурсов в функции Java Spring-Boot AZURE?
Я пишу лазурную функцию, используя весеннюю загрузку, и я хочу прочитать папку ресурсов формы файла, но каждый раз получаю исключение нулевого указателя. пожалуйста, помогите мне в этом, как я могу исправить эту проблему? либо мне нужно поместить файл в хранилище BLOB-объектов, либо что-то еще есть в функции azure для чтения файла с помощью приложения загрузки java spring?
ниже мой класс обработчика:
открытый класс FunctionHandler расширяет 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();
}
}
1 ответ
Решение
Попробуйте использовать этот код:
InputStream resourceInputStream = new FileInputStream(HelloFunction.class.getClassLoader().getResource("").getPath()+"../../src/main/java/com/example/resources/hello.json");
Моя структура исходного кода выглядит следующим образом:
h ttps:https://stackru.com/images/4e9716828efd3fb232158925eb6d16f648e6bbb8.png
ОБНОВИТЬ:
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"));
h ttps:https://stackru.com/images/e3125a02c3cbcee6ea56de367890fcd673c48986.png