#java #azure #azure-blob-storage #azure-queues
#java #azure #azure-blob-хранилище #azure-очереди
Вопрос:
Я создал приложение azure function и развернул его в azure. Приложение возьмет zip-файл из указанного контейнера и распакует его в другой контейнер или указанный контейнер. Мой код не загружает файл через 5 минут, указывая значение тайм-аута. Вот мое изображение ошибки с экрана журнала Azure
Мой код
public class QueueTriggerFunction {
@FunctionName("QueueTriger")
public void execute(@QueueTrigger(name = "myQueueItem", dataType = "", queueName = "httpqueuereq", connection = "AzureWebJobsStorage") Details message,
@BlobInput(
name = "file",
dataType = "binary", connection = "AzureWebJobsStorage",
path = "{Path}") byte[] content,
final ExecutionContext executionContext) throws IOException {
String connectStr = "DefaultEndpointsProtocol=https;AccountName=sdfswedfsf;AccountKey=dsdfsedfsfsffsf dfdfdfd==;EndpointSuffix=core.windows.net";
// Create a BlobServiceClient object which will be used to create a container client
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(connectStr).buildClient();
//Create a unique name for the container
String containerName = "output";
// Create the container and return a container client object
BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName);
InputStream targetStream = new ByteArrayInputStream(content);
ZipInputStream zipIn = new ZipInputStream(targetStream);
ZipEntry zipEntry = zipIn.getNextEntry();
while(zipEntry != null) {
// Get a reference to a blob
BlobClient blobClient = containerClient.getBlobClient(zipEntry.getName());
ByteArrayOutputStream outputB = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int n;
while ((n = zipIn.read(buf, 0, 1024)) != -1) {
outputB.write(buf, 0, n);
}
// Upload to container
ByteArrayInputStream inputS = new ByteArrayInputStream(outputB.toByteArray());
// Upload to container
blobClient.upload(inputS, inputS.available(), true);
zipEntry = zipIn.getNextEntry();
}
zipIn.close();
}
}
Тот же код работает, когда я пытаюсь из приложения spirng boot. Ниже приведен рабочий код загрузки spring.
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
String connectStr = "DefaultEndpointsProtocol=https;AccountName=fffffffff;AccountKey=qj/ffffffffff/UuCmERTQ1uNXzXuhCD fffff==;EndpointSuffix=core.windows.net";
// Create a BlobServiceClient object which will be used to create a container client
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(connectStr).buildClient();
//Create a unique name for the container
String containerName = "zipfiles";
// Create the container and return a container client object
BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName);
// Get a reference to a blob
BlobClient blobClient = containerClient.getBlobClient(file.getOriginalFilename());
// Upload to container
blobClient.upload(file.getInputStream(), file.getSize(), true);
return "Done";
}
Пожалуйста, помогите кому-нибудь с решением.
Ответ №1:
Я посмотрел, кажется, ваш код в основном правильный. Убедитесь, что это не вызвано необходимостью процесса более 5 минут? Ваш zip-файл слишком большой?
Вы можете ознакомиться с приведенным ниже документом, и пусть настройки тайм-аута функции будут больше, и повторите попытку.
https://docs.microsoft.com/en-us/azure/azure-functions/functions-host-json#functiontimeout
Комментарии:
1. Размер файла не превышает 320 КБ. В любом случае, спасибо, я решил это, сославшись на ссылку