当前位置: 首页 > 知识库问答 >
问题:

无法在FTP服务器上写入多个文件

薛欣德
2023-03-14

你好,我有错误,如java.lang.NullPointerException上OutputStream out=ftp.storeFileStream(路径);.

你能帮帮我吗?代码编写了第一个图像,并完全停止了编写。这是我的方法代码。。。。。。。。

    public void getIncidentPhotoByID(int incidentid, int photoId) {
    String base64Image = null;
    WebSSLClient client = new WebSSLClient();
    String photo_Id= "incident_"+incidentid;
    String jsonResponse,jsonResImg; 
    Response response =client.createRequest(PropertiesUtil.getOracleCloudRestUrL() + "/mobile/platform/storage/collections/dev_cre_incident_photos_collection/objects").get();
    jsonResponse = response.readEntity(String.class); 
    Map<String,String> imgMap = new HashMap<>();     
    try {
        JSONObject jsonObj = new JSONObject(jsonResponse);
        JSONArray jsonArr = jsonObj.getJSONArray("items");
        for (int i = 0; i < jsonArr.length(); ++i) {
            JSONObject rec = jsonArr.getJSONObject(i);
            String name = rec.getString("name");             
            String name_id = removeStr(name);
            if(name_id.equals(photo_Id)){ 
                Response response1 =client.createRequest(PropertiesUtil.getOracleCloudRestUrL() + "/mobile/platform/storage/collections/dev_cre_incident_photos_collection/objects/"+name).get();
                jsonResImg = response1.readEntity(String.class); 
                imgMap.put(name, jsonResImg);
            }           
        }            
    } catch (JSONException e) {
        e.getMessage();
    }

我将发布两个单独的代码。事实上这是一种方法。

    FTPClient ftp = new FTPClient();  
    FileInputStream fis = null;
     try  {                 
          ftp.connect("link.myjpl.com");
          ftp.login("user", "password");
          ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            Set set;
            set = imgMap.entrySet();
            Iterator iterator = set.iterator();
            while(iterator.hasNext()) {
                Map.Entry mentry = (Map.Entry)iterator.next();

                base64Image = mentry.getValue().toString();
                      System.out.println(base64Image);
                String filename =  mentry.getKey().toString();
                     System.out.println(filename);
                String[] strings = base64Image.split(",");
                String extension;
                   switch (strings[0]) {//check image's extension
                       case "data:image/jpeg;base64":
                           extension = "jpeg";
                           break;
                       case "data:image/png;base64":
                           extension = "png";
                           break;
                       default://should write cases for more images types
                           extension = "jpg";
                           break;
                   }   
                       byte[] data1 = Base64.decodeBase64(strings[1]);
                       String dirPath ="ReportImages/test/";
                       String dir = dirPath+photo_Id;
                       boolean dirExists = ftp.changeWorkingDirectory(dir);
                       if(!dirExists){
                           ftp.makeDirectory(dir);  
                       }
                       String path = dir+"/"+filename+"."+ extension;                        

                       OutputStream out = ftp.storeFileStream(path);
                       out.write(data1); 
                       ftp.completePendingCommand();
                       out.flush();
             }
                    ftp.disconnect();                             
        } catch (IOException e) {
            System.out.print(e);
            e.printStackTrace();
            System.out.println("Error while FTP'ing ");   
        } 
} 

这是NPE错误!

SEVERE: 

java.lang.NullPointerException atcom.scm.cre.cloud.model.services.CareCloudDbAppModuleImpl.getIncidentPhotoByID(CareCloudDbAppModuleImpl.java:144)atcom.scm.cre.batch.job.ConnectTest.callRestAip(ConnectTest.java:20)atcom.scm.cre.batch.CareExecutor.main(CareExecutor.java:84)

进程已退出,退出代码为1。这是一个屏幕截图。。。。在此处输入图像描述

共有1个答案

郝玄天
2023-03-14

看看javadocs

它说:

如果无法打开数据连接(例如,文件不存在),则返回null(在这种情况下,您可以检查回复代码以确定失败的确切原因)。

因此,您的代码应该执行:

if (out == null) {
    System.out.println(ftp.getReplyCode());
    System.out.println (ftp.getReplyString());
}

就我而言,原因是

550许可被拒绝。

在我的情况下,可以通过编辑 /etc/vsftpd.conf来治愈

并更改为

write_enable=是

保存文件并使用sudo service vsftpd restart重新启动vsftpd。

这里有一个更完整的例子

FTPClient ftp = new FTPClient();

try {
    ftp.connect("somehost");
    ftp.login("user", "pw");
    ftp.enterLocalPassiveMode();

    OutputStream out = ftp.storeFileStream("dump1");
    if (out == null) {
        System.out.println(ftp.getReplyCode());
        System.out.println (ftp.getReplyString());
        return;
    }
    out.write("test is a test".getBytes());
    out.flush();
    out.close();
    System.out.println (ftp.getReplyString());
    ftp.completePendingCommand();
    System.out.println (ftp.getReplyString());

    out = ftp.storeFileStream("dump2");
    if (out == null) {
        System.out.println(ftp.getReplyCode());
        System.out.println (ftp.getReplyString());
        return;
    }
    out.write("test is a test2".getBytes());
    out.flush();
    out.close();
    System.out.println (ftp.getReplyString());
    ftp.completePendingCommand();
    System.out.println (ftp.getReplyString());

} catch (IOException e) {
    e.printStackTrace();
}
    finally {
        try {
            ftp.disconnect();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 类似资料:
  • 我在FTP上写入Base64image数据时遇到了问题。当我把它写在本地驱动器上时,照片显示得很清楚。但是,当我把它写在FTP服务器上时,它看起来就像被破坏的图像。当我把它写在本地驱动器上时,它是这样显示的。在这里输入图像描述。我已将图片附加到FTP上。在此处输入图像描述 这是我的密码。 }

  • 我正在尝试将FTP服务器上的多个文件移动到同一服务器上的不同目录。到目前为止,我已经编写了一个bash脚本,该脚本将登录并检索远程目录中的任何新文件,但ftp命令不支持“mv”命令。本质上,该脚本将下载新文件,然后在下载后将文件移动到同一服务器上的不同目录。请注意,每次文件名都会不同,因此通配符的使用很重要。 在你回答之前,请注意这需要自动化,所以使用像Filezilla这样的GUI对我没有帮助,

  • 当我尝试将对象内容上载到FTP服务器 [它的值从[T:InputFileUpload]组件中获取] 我的web浏览器中的加载指示器播放并且不会停止 调试时,我发现我的come在一行中冻结 但是我尝试了3个方法(如代码所示)来上载 ,但是所有方法仍然不工作 将文件上载到FTPServer控制器方法

  • 问题内容: 我正在尝试编写一个代码,以在我的独立服务器上打开FTP服务器,以便可以将文件从FTP服务器复制到另一台计算机上的客户端,反之亦然。 我得到了Apache FtpServer,但对其使用感到有些困惑,并且正在寻找使用它的基本步骤。也许像这样: 做连接命令 登录 做一些事情… 问题答案: 让我使用非常有用的 Apache FtpServer 为您编写一个基本示例: 请注意,在服务器端,您不

  • 我正在尝试上传一个图像。当我从本地主机上进行时,它工作得很好,但当我发布它时,它从服务器上抛出一个错误: 当我使用此代码时: 错误为: System.io.DirectoryNotFoundException:找不到路径“d:\inetpub\vhosts\xx.com\httpdocs\images\sections\developer\clientlogo\demo.png”的一部分。在sys

  • 问题内容: 我在DWR中使用Spring。我想返回一个文件对象作为响应,但是我将文件(要发送)保存在服务器的临时位置,然后将其位置作为href发送给客户端的锚标记,但是我想知道是否有办法抛出该文件文件直接发送到响应对象上的浏览器,而无需将其临时保存在服务器上。 我希望是否有办法通过DWR发送文件作为响应。 问题答案: