Я использую библиотеку JCIFS для извлечения файла из местоположения NAS. Мой код выглядит следующим образом:
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(domain, userName, password);
SmbFile sFile = new SmbFile(fileRecordId, auth);
jcifs.Config.setProperty("jcifs.smb.client.responseTimeout", "1200000");
jcifs.Config.setProperty("jcifs.smb.client.soTimeout", "1200000");
jcifs.Config.setProperty("jcifs.resolveOrder", "DNS");
jcifs.Config.setProperty("jcifs.util.loglevel", "3");
jcifs.Config.setProperty("jcifs.smb.client.dfs.disabled", "false");
LOG.debug("SmbFileInputStream");
BufferedInputStream inputStream = new BufferedInputStream(new SmbFileInputStream(sFile));
byte[] bytes = IOUtils.toByteArray(inputStream);
LOG.debug("fetched");
inputStream.close();
Однако для файла размером 1 МБ загрузка из NAS занимает почти 1 минуту, а для файла размером 15 МБ - около 15 минут.
Я пробовал решения в JCIFS: поиск файла слишком медленный, чтобы его можно было использовать
Кроме того, с уровнем логики 3 я получаю кучу следующих исключений:
jcifs.smb.SmbAuthException: Logon failure: unknown user name or bad password.
at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:546)
at jcifs.smb.SmbTransport.send(SmbTransport.java:663)
at jcifs.smb.SmbSession.sessionSetup(SmbSession.java:390)
at jcifs.smb.SmbSession.send(SmbSession.java:218)
at jcifs.smb.SmbTree.treeConnect(SmbTree.java:176)
at jcifs.smb.SmbTree.send(SmbTree.java:74)
at jcifs.smb.SmbTransport.getDfsReferrals(SmbTransport.java:703)
at jcifs.smb.Dfs.getTrustedDomains(Dfs.java:66)
at jcifs.smb.Dfs.resolve(Dfs.java:167)
at jcifs.smb.SmbFile.resolveDfs(SmbFile.java:671)
at jcifs.smb.SmbFile.send(SmbFile.java:773)
at jcifs.smb.SmbFileInputStream.readDirect(SmbFileInputStream.java:181)
at jcifs.smb.SmbFileInputStream.read(SmbFileInputStream.java:142)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2146)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:2102)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2123)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:2078)
at org.apache.commons.io.IOUtils.toByteArray(IOUtils.java:721)
at cmm_tests.Samba.getArchive(Samba.java:83)
at cmm_tests.Samba.main(Samba.java:37)
Но файл загружается.
Почему для получения файла из хранилища NAS требуется так много времени?