从别的渠道传来的attachment附件 ,后端接口接收到参数后,base64解码成字节数组,这时候用I/O流的方式还原文件到本地目录,按需将文件加密,传输到sftp服务器,使用postman测试接口功能,
第一个问题:格式问题
在win10环境下 文件目录是d:\a的格式 ,但是在bash环境下 识别不出来,要反斜杠 / 的格式
第二个问题cmd 不能运行openssl命令
需要打开git 的bash.exe的绝对路径,如d:\\git\\bin\\bash.exe
第三个问题 密钥格式不对,不能加密
我用openssl命令将某个文件加密 ,例如我用到了rsa密钥,不能直接用
先创建 OpenSSH 密钥文件的一个副本,以便可以转换副本而不影响原始密钥。 bash 複製程式碼 cp /c/Users/13467/.ssh/id_rsa /c/Users/13467/.ssh/id_rsa.pem 转换副本为 PEM 格式: 使用 ssh-keygen 将副本转换为 PEM 格式。 bash 複製程式碼 ssh-keygen -p -m PEM -f /c/Users/13467/.ssh/id_rsa.pem 这将把 id_rsa.pem 转换为 PEM 格式,但不会影响原始的 id_rsa 文件。
第四个问题 怎么把源文件发给后端接口呢?
源文件是通过附件的格式传进来的,源文件被编码成base64位,传进来后解码,注意传进来是.pdf,解码的时侯先解成字节,然后创建的文件名也要是.pdf的后缀,这样文件流转换成xxx.pdf后可以正常打开
第五个问题:postman发送附件,怎么发送呢?
请看以下截图
第六个问题: 使用Java代码生成base64编码
@Test public void test(){ try { String filePath = "abc.pdf";//文件的绝对路径 // 读取文件到字节数组 byte[] fileBytes = Files.readAllBytes(new File(filePath).toPath()); // 使用 Base64 编码字节数组 String base64Encoded = Base64.getEncoder().encodeToString(fileBytes); // 打印或使用 Base64 编码后的字符串 System.out.println("Base64 Encoded String: "); System.out.println(base64Encoded); } catch (IOException e) { e.printStackTrace(); } }
第七个问题: 将文件打包后怎么传递到给定的文件服务器上呢?
使用jsch 包操作sftp文件传输,首先要有主机名 端口号 用户名,然后是用户密码或者私钥,由于jsch 是先建立ssh通道,然后打开sftp通道,然后才能用put 或get上传或下载文件 ,在使用put前要(ChannelSftp) channel.cd("远程目录"),下载的时候可以先找到文件再下载 ,找文件可以
Vector<ChannelSftp.LsEntry> fileList = sftp.ls(sftpRemotePath);
for (ChannelSftp.LsEntry entry : fileList) {
String fileName = entry.getFilename();
先检查fileName的名称,用String 的indexOf() endWith() 等方法匹配特定文件名