繁体   English   中英

从图库上传图像到FTP没有这样的文件或目录

[英]Upload Image from Gallery to FTP No such file or directory

我正在尝试将从图库中选择的图像上传到我的ftp服务器。

我的代码:

public void imageButton() {
        chooseImg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                System.out.println("GETTING HERE");
                startActivityForResult(gallery, RESULT_LOAD_IMAGE);
            }
        });
    }

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data != null) {
            Toast.makeText(AddProduct.this, "Image selected", Toast.LENGTH_LONG).show();
            Uri selected = data.getData();
            new uploadFTP().execute(selected.getPath());
        }
    }

    class uploadFTP extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... strings) {
            FTPClient ftpClient = new FTPClient();
            try {

                ftpClient.connect(InetAddress.getByName("address"));
                ftpClient.login("hostname", "passowrd");
                ftpClient.enterLocalActiveMode();
                if (ftpClient.isConnected()) {
                    System.out.println("Connected to FTP");
                }
                ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
                ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
                String testName = "/public_html/" + System.currentTimeMillis() + "test";
                File file = new File(Arrays.deepToString(strings));
                FileInputStream fis = new FileInputStream(file);
                ftpClient.storeFile(testName,fis);
                System.out.println("Successful");




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

运行此代码时,我得到:

I/System.out: Connected to FTP
W/System.err: java.io.FileNotFoundException: [/external/images/media/217] (No such file or directory)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(FileInputStream.java:200)
W/System.err:     at java.io.FileInputStream.<init>(FileInputStream.java:150)
        at com.example.ufaza.androidsqlitesearch.AddProduct$uploadFTP.doInBackground(AddProduct.java:147)
        at com.example.ufaza.androidsqlitesearch.AddProduct$uploadFTP.doInBackground(AddProduct.java:130)
        at android.os.AsyncTask$2.call(AsyncTask.java:345)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:257)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:784)

因此,我知道我的FTP连接可以正常工作,因为我有另一个类可以将文本文件正确上传到ftp,但是现在我正尝试从图库中上传图像,但出现错误,提示没有此类文件或目录图片,所以我假设路径错误或什么? 我不确定我做错了什么,需要一些建议。

Uri不是文件。

如果 Uri的方案是file它表示文件系统上的一个文件,从理论上讲,您的应用程序应该可以访问该文件。 使用getPath()获取文件系统路径。

如果方案是其他方案,则它不一定代表您的应用程序可以访问的文件系统上的文件。 例如,如果方案是httphttps ,则Uri表示将从Web服务器下载的内容。

如果方案是content ,则由ContentProvider支持。 使用ContentResolveropenInputStream()获得有关Uri标识的内容的InputStream

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM