Java上传文件到Windows共享目录问题 STATUS_ACCESS_DENIED(0xc000022)

Java上传文件到Windows共享目录问题

smpj上传到Windows共享目录一直失败,报STATUS_ACCESS_DENIED(0xc000022)。在GitHub上看错误码是服务器上报的,查看errortable是给到权限与服务器要求的权限不一致。openFile的第二个参数设置为添加文件和写文件即可(之前是全集操作GENERIC_ALL)。

File f = share.openFile(fileName, new HashSet(Arrays.asList(new AccessMask[]
{ AccessMask.FILE_ADD_FILE, AccessMask.FILE_WRITE_DATA })), fileAttributes, SMB2ShareAccess.ALL,
SMB2CreateDisposition.FILE_CREATE, createOptions);

文章:
https://www.soinside.com/question/e8TfG5dv4aV6xwWirYkR55

String fileName =“EricTestFile.txt”;
String fileContents = “Mary had a little lamb.”;

SMBClient client = new SMBClient();
try (Connection connection = client.connect(serverName)) {
AuthenticationContext ac = new AuthenticationContext(username, password.toCharArray(), domain);
Session session = connection.authenticate(ac);

// Connect to Share
try (DiskShare share = (DiskShare) session.connectShare(sharename)) {
    for (FileIdBothDirectoryInformation f : share.list(folderName, "*.*")) {
        System.out.println("File : " + f.getFileName());
    }

    //share.openFile(path, accessMask, attributes, shareAccesses, createDisposition, createOptions)
    Set<FileAttributes> fileAttributes = new HashSet<>();
    fileAttributes.add(FileAttributes.FILE_ATTRIBUTE_NORMAL);
    Set<SMB2CreateOptions> createOptions = new HashSet<>();
    createOptions.add(SMB2CreateOptions.FILE_RANDOM_ACCESS);
    File f = share.openFile(folderName+"\\"+fileName, new HashSet(Arrays.asList(new AccessMask[]{AccessMask.GENERIC_ALL})), fileAttributes, SMB2ShareAccess.ALL, SMB2CreateDisposition.FILE_OVERWRITE, createOptions);

    OutputStream oStream = f.getOutputStream();
    oStream.write(fileContents.getBytes());
    oStream.flush();
    oStream.close();
}

} catch (IOException e) {
e.printStackTrace();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值