【问题标题】:Send file with Java CIFS Client Library on Linux在 Linux 上使用 Java CIFS 客户端库发送文件
【发布时间】:2019-03-22 07:11:38
【问题描述】:

我尝试将包含打印数据(来自 Zebra 打印机的数据)的文件从 Linux 机器发送到 Windows 机器上的共享打印机,但它不起作用,我尝试了所有方法。我最后的想法是先尝试在Linux机器上通过命令行工作,然后在Java中做同样的解决方案,结果是:它是通过命令行工作,但在Java中不行。

我在 Linux 上的命令行解决方案有:

smbclient \\\\host\\printer_share -U 'domain/user%pass' -c "put file_name"

使用 smbclient 的解决方案效果很好,所以我考虑在 Java 中使用 jCIFS,但它在打印机中不起作用。在同一主机的共享文件夹中它可以工作,但在打印机共享中没有,但是通过带有 smbclient 的命令行可以工作。有人知道我哪里出错了吗?

我的java代码:

public static void sendFileToPrinter(String commandsToPrinter) {
    String user = "user";
    String pass = "pass";
    String domain = "domain";

    String path = "smb://host/printer_share/file_to_print";
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(domain, user, pass);
    SmbFile smbFile = new SmbFile(path, auth);
    SmbFileOutputStream smbfos = new SmbFileOutputStream(smbFile);
    smbfos.write(commandsToPrinter.getBytes());
    System.out.println("Work");
}   

Java 错误:

【问题讨论】:

  • 你有什么错误吗?
  • 我在上面添加了图片
  • 打印机是否仍支持 SMBv1?您是否尝试过使用 SMBv2 库,例如 github.com/hierynomus/smbj
  • @HieryNomus 我在 GitHub 上阅读了您的文档并设法完成了我需要的工作。感谢您对项目的帮助和祝贺。
  • 也许可以将答案添加到您的问题中。这将帮助其他用户;)

标签: java linux zebra-printers smb jcifs


【解决方案1】:

不管操作系统如何,我都能在 @HieryNomus 的帮助下解决问题,他有一个完美的库来实现 SMB。 git链接:https://github.com/hierynomus/smbj/

出于我的需要,我通过以下实现实现(这只是我的测试代码):

public static void sendCommandToZebraPrinter(String command) throws MalformedURLException, SmbException, IOException {

    String username = "username";
    String password = "password";
    String domain = "mydomain";
    String sharedDirectory = "PRINTER_SHARE";
    String computerName = "MYCOMPUTER";

    SMBClient client = new SMBClient();

    try (Connection connection = client.connect(computerName)) {
        AuthenticationContext ac = new AuthenticationContext(username, password.toCharArray(), domain);
        Session session = connection.authenticate(ac);
        try (PrinterShare share = (PrinterShare) session.connectShare(sharedDirectory)) {
            InputStream stream = new ByteArrayInputStream(command.concat("\n").getBytes(StandardCharsets.UTF_8));
            share.print(stream);
        }
    }
}

命令变量为斑马打印机(GC420t)的EPL命令,如:

I8,A,001


Q104,024
q863
rN
S2
D11
ZT
JF
OD
R172,0
f100
N
75,33,D,h3,"1"
b363,39,D,h2,"TEST"
b198,33,D,h3,"TEST"
LO154,4,1,73
LO280,4,1,73
A149,27,2,2,1,1,N,"1"
A272,26,2,3,1,1,N,"TEST"
A425,26,2,3,1,1,N,"TEST"
P1

如果命令不起作用:在命令末尾添加\n

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多