Не удалось прочитать файл, загруженный в BLOB-объект Azure - PullRequest
0 голосов
/ 18 июня 2019

при попытке загрузить документ с публичного URL в Blob с помощью startCopy () не удается загрузить содержимое файла

тот же URL-адрес загружается с помощью uploadFromFile (filePath)

нерабочий код

URL url =new URL  ("http://irpages2.equitystory.com/download/companies/douglasgmbh/Pres_web/6M_FY2018-19_InvestorUpdate.pdf");

newBlobReference.startCopy(new URI(url.toString()));

рабочий код

        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        try (ReadableByteChannel rbc = Channels.newChannel(conn.getInputStream());
                final FileOutputStream fos = new FileOutputStream(filePath)) {

            fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);

        }


newBlobReference.uploadFromFile(filePath);

хотел бы загрузить документы без необходимости сначала загружать их в локальную систему, так как для этого требуется огромное количество документов. Во-вторых, URL, который загружается с помощью startCopy (), не может быть прочитан, даже если в контейнере присутствует большой двоичный объект

1 Ответ

0 голосов
/ 20 июня 2019

Я пробовал с startCopy и получил тот же результат, что и у вас, файл не имеет содержимого.И я не знаю причину, поэтому я использую BlobOutputStream для загрузки файла, и это сработало. Ниже приведен мой код, вы можете попробовать.

        String connectionString = String.format("DefaultEndpointsProtocol=http;AccountName=%s;AccountKey=%s", ACCOUNT_NAME, ACCOUNT_KEY);
        CloudStorageAccount account = CloudStorageAccount.parse(connectionString);
        CloudBlobContainer container = null;

        CloudBlobClient client = account.createCloudBlobClient();

        container = client.getContainerReference("blobcontainer");

        CloudBlockBlob blob = container.getBlockBlobReference("6M_FY2018-19_InvestorUpdate.pdf");

        URL uri =new URL("http://irpages2.equitystory.com/download/companies/douglasgmbh/Pres_web/6M_FY2018-19_InvestorUpdate.pdf");

        InputStream is=uri.openStream();

        BlobOutputStream blobOutputStream = blob.openOutputStream();

        int next = is.read();
        while (next != -1) {
            blobOutputStream.write(next);
            next = is.read();
        }
        blobOutputStream.close();
...