Медленная загрузка файлов Samba JCIFS - PullRequest
0 голосов
/ 27 июня 2019

Я использую библиотеку 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 требуется так много времени?

...