如何在Android中实现将照片上传到FTP服务器的完整代码示例?
•
未分类 •
阅读 14
在Android应用中实现将照片传送到FTP服务器的功能,需要使用一些网络编程和文件操作的知识,以下是详细的步骤和代码示例,帮助你完成这个任务。
1. 准备工作
1 添加权限
需要在AndroidManifest.xml
文件中添加必要的权限:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2 添加依赖库
为了简化FTP操作,可以使用Apache Commons Net库,在你的build.gradle
文件中添加以下依赖:
implementation 'commons-net:commons-net:3.8.0'
2. 获取照片
1 从相册选择照片
可以通过Intent来启动系统相册并选择照片:
private static final int PICK_IMAGE = 1; private void selectImage() { Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, PICK_IMAGE); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PICK_IMAGE && resultCode == RESULT_OK && data != null) { Uri selectedImage = data.getData(); uploadImageToFtp(selectedImage); } }
3. 上传照片到FTP服务器
1 创建FTP客户端类
创建一个FTP客户端类来处理FTP连接和文件上传:
import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class FtpUploader { private String server; private int port; private String user; private String pass; public FtpUploader(String server, int port, String user, String pass) { this.server = server; this.port = port; this.user = user; this.pass = pass; } public boolean uploadFile(String localFilePath, String remoteFilePath) { FTPClient ftpClient = new FTPClient(); try { ftpClient.connect(server, port); ftpClient.login(user, pass); ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); try (InputStream inputStream = new FileInputStream(localFilePath)) { return ftpClient.storeFile(remoteFilePath, inputStream); } } catch (IOException ex) { ex.printStackTrace(); return false; } finally { try { if (ftpClient.isConnected()) { ftpClient.logout(); ftpClient.disconnect(); } } catch (IOException ex) { ex.printStackTrace(); } } } }
2 上传图片到FTP服务器
在uploadImageToFtp
方法中调用FTP客户端类进行上传:
private void uploadImageToFtp(Uri imageUri) { String filePath = getRealPathFromURI(imageUri); // 获取本地文件路径的方法见下文 FtpUploader ftpUploader = new FtpUploader("ftp.example.com", 21, "username", "password"); boolean success = ftpUploader.uploadFile(filePath, "/path/on/ftp/server/image.jpg"); if (success) { Toast.makeText(this, "Upload successful!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "Upload failed!", Toast.LENGTH_SHORT).show(); } }
3 获取本地文件路径的方法
由于Android的URI机制,我们需要一个方法来获取实际的文件路径:
private String getRealPathFromURI(Uri contentUri) { String[] proj = {MediaStore.Images.Media.DATA}; CursorLoader loader = new CursorLoader(this, contentUri, proj, null, null, null); Cursor cursor = loader.loadInBackground(); int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String result = cursor.getString(columnIndex); cursor.close(); return result; }
4. 完整代码示例
以下是完整的代码示例,包括所有步骤:
import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.widget.Toast; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "." + "</pre>
原创文章,作者:未希,如若转载,请注明出处:https://www.lbseo.cn/12156.html