我正在尝试在我的Android应用上实施FTP Java库,以将图像上传到FTP服务器
该库是apache-commons-net的3.4版本。
问题是上传图片时,文件已损坏且无法显示。
这是代码的一部分。
首先连接到服务器并进行配置,(工作正常)
public boolean ftpConnect(String host, String username,
String password, int port)
{
try {
mFTPClient = new FTPClient();
mFTPClient.connect(host, port);
if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {
boolean status = mFTPClient.login(username, password);
mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
mFTPClient.enterLocalPassiveMode();
return status;
}
} catch(Exception e) {
e.printStackTrace();
Log.d(TAG, "Error: could not connect to host " + host );
}
return false;
}
然后上传文件并显示进度
public boolean ftpUpload() {
boolean finalizado = false;
String destDir="";
try {
mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
mFTPClient.enterLocalPassiveMode();
while(mFilesUploaded < f.size() && !cancel){
tmpFile = f.get(mCurrentFileIndex);
String[] fileAux2 = tmpFile.getName().split("\\(");
String[] parentAux = tmpFile.getParent().split("\\/");
System.out.println(tmpFile.getName());
if(isBackup){
if(parentAux[parentAux.length - 1].equals("databases")) {destDir ="Backup/db";}
else { destDir ="Backup/data/" + parentAux[parentAux.length - 1];}
}
else{ destDir = "/"+fileAux2[0]; }
System.out.println(destDir + " -> " + checkDirectoryExists(destDir));
if(!checkDirectoryExists(destDir)) ftpCreateDirectoryTree(destDir);
else ftpChangeDirectory(destDir);
String filePath = destDir + "/" + tmpFile.getName();
//if(checkFileExists(filePath)) {System.out.println("intento eliminar " + ftpRemoveFile(filePath));}
InputStream srcFileStream = new FileInputStream(tmpFile);
OutputStream out = mFTPClient.storeFileStream(tmpFile.getName());
byte[] buffer = new byte[1024];
int read;
int allRead = 0;
while( ( ( read = srcFileStream.read( buffer ) ) != - 1 ) && !cancel) {
allRead += read;
Double porcentaje = ((double) allRead / (double)tmpFile.length()) * 100;
publishProgress((int) Math.round(porcentaje));
out.write( buffer, 0, read );
}
srcFileStream.close();
out.flush();
out.close();
if(read == -1 && mFTPClient.completePendingCommand() && !cancel){
publishProgress(100);
mFilesUploaded++;
mCurrentFileIndex++;
}
else{
publishProgress(-1);
}
}
if(cancel == true){cancel = false; finalizado = false;}
else finalizado = true;
mCurrentFileIndex = 0;
mFilesUploaded = 0;
ftpDisconnect();
}
catch (Exception e) {
e.printStackTrace();
}
return finalizado;
}
编辑:上传文件时,其尺寸小于原始尺寸。(mFTPClient.setFileType(FTP.BINARY_FILE_TYPE)
已配置。)
如果我减小byte[] buffer = new byte[1024];
的字节大小,文件大小会增加,但上传时间太慢
有人可以帮助我吗?