无法在FTP服务器上写入多个文件 [英] Unable to write multiple file on FTP server

查看:207
本文介绍了无法在FTP服务器上写入多个文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好我在OutputStream out = ftp.storeFileStream(path);上遇到java.lang.NullPointerException等错误。在我写一个文件后,无法继续在FTP服务器上写第二个文件。

Hello I have got error such as java.lang.NullPointerException on OutputStream out = ftp.storeFileStream(path);. after I write one file and was not able to continue to write second files on FTP server.

你能帮帮我吗?代码写了第一张图片并完全停止写了。
这是我的方法代码........

Could you please help me? the code wrote 1st image and stopped writing it at all. Here is my method code ........

    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();
    }

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

I will post 2 separate codes. It's one method in fact.

    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
at com.scm.cre.cloud.model.services.CareCloudDbAppModuleImpl.getIncidentPhotoByID(CareCloudDbAppModuleImpl.java:144)
at com.scm.cre.batch。 job.ConnectTest.callRestAip(ConnectTest.java:20)
at com.scm.cre.batch.CareExecutor.main(CareExecutor.java:84)

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

进程退出退出代码1.
这是一个截屏....
在此处输入图像说明

Process exited with exit code 1. Here is a screen shot.... enter image description here

推荐答案

查看 javadocs

它说:

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

因此您的代码应该执行:

Therefore your code should do:

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

在我的情况下,原因是

550权限被拒绝。

在我的案例中可以通过编辑/etc/vsftpd.conf来解决这个问题

which in my case was curable by editing /etc/vsftpd.conf

并更改为

write_enable = YES

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

Save the file and restart vsftpd with sudo service vsftpd restart.

此处是一个更全面的示例

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服务器上写入多个文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆