[英]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()
获取文件系统路径。
如果方案是其他方案,则它不一定代表您的应用程序可以访问的文件系统上的文件。 例如,如果方案是http
或https
,则Uri
表示将从Web服务器下载的内容。
如果方案是content
,则由ContentProvider
支持。 使用ContentResolver
和openInputStream()
获得有关Uri
标识的内容的InputStream
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.