|
11 | 11 | import java.io.InputStream; |
12 | 12 | import java.io.OutputStream; |
13 | 13 | import java.io.PrintWriter; |
| 14 | +import java.io.UnsupportedEncodingException; |
14 | 15 | import java.lang.SecurityException; |
15 | 16 | import java.lang.reflect.Method; |
16 | 17 | import java.net.SocketException; |
17 | 18 | import java.net.URI; |
18 | 19 | import java.net.URISyntaxException; |
19 | 20 | import java.net.URISyntaxException; |
| 21 | +import java.net.URLDecoder; |
| 22 | +import java.net.URLEncoder; |
| 23 | +import java.nio.charset.StandardCharsets; |
20 | 24 | import java.util.ArrayList; |
| 25 | +import java.util.Arrays; |
21 | 26 | import java.util.HashMap; |
22 | 27 | import java.util.List; |
23 | 28 | import org.apache.commons.net.ftp.*; |
@@ -101,6 +106,9 @@ public void run() { |
101 | 106 | ftp = ftpProfiles.get(ftpId); |
102 | 107 | reply = ftp.getReplyCode(); |
103 | 108 | if (ftp.isConnected() && FTPReply.isPositiveCompletion(reply)) { |
| 109 | + ftp.setControlEncoding("UTF-8"); |
| 110 | + ftp.setAutodetectUTF8(true); |
| 111 | + System.setProperty("ftp.client.encoding", "UTF-8"); |
104 | 112 | // test if connection is still valid |
105 | 113 | ftp.sendNoOp(); |
106 | 114 | Log.d("FTP", "FTPClient (" + ftpId + ") is connected"); |
@@ -240,11 +248,38 @@ public void run() { |
240 | 248 | JSONObject jsonFile = new JSONObject(); |
241 | 249 | jsonFile.put("name", filename); |
242 | 250 | jsonFile.put("size", file.getSize()); |
243 | | - jsonFile.put("isDirectory", file.isDirectory()); |
244 | | - jsonFile.put("isFile", file.isFile()); |
245 | | - jsonFile.put("isSymbolicLink", file.isSymbolicLink()); |
246 | | - jsonFile.put("link", file.getLink()); |
247 | 251 | jsonFile.put("url", joinPath(path, filename)); |
| 252 | + |
| 253 | + if (file.isSymbolicLink()) { |
| 254 | + jsonFile.put("isLink", true); |
| 255 | + String linkTarget = file.getLink(); |
| 256 | + jsonFile.put("link", linkTarget); |
| 257 | + String linkPath = linkTarget.startsWith("/") |
| 258 | + ? linkTarget |
| 259 | + : joinPath(path, linkTarget); |
| 260 | + try { |
| 261 | + FTPFile[] targetFiles = ftp.listFiles(linkPath); |
| 262 | + if (targetFiles.length > 0) { |
| 263 | + FTPFile targetFile = targetFiles[0]; |
| 264 | + jsonFile.put("isFile", targetFile.isFile()); |
| 265 | + jsonFile.put("isDirectory", targetFile.isDirectory()); |
| 266 | + jsonFile.put("url", linkPath); |
| 267 | + } else { |
| 268 | + jsonFile.put("isFile", false); |
| 269 | + jsonFile.put("isDirectory", false); |
| 270 | + } |
| 271 | + } catch (Exception e) { |
| 272 | + // Handle broken symlink |
| 273 | + jsonFile.put("isFile", false); |
| 274 | + jsonFile.put("isDirectory", false); |
| 275 | + } |
| 276 | + } else { |
| 277 | + jsonFile.put("isLink", false); |
| 278 | + jsonFile.put("isDirectory", file.isDirectory()); |
| 279 | + jsonFile.put("isFile", file.isFile()); |
| 280 | + jsonFile.put("link", null); |
| 281 | + } |
| 282 | + |
248 | 283 | jsonFile.put( |
249 | 284 | "lastModified", |
250 | 285 | file.getTimestamp().getTimeInMillis() |
@@ -558,6 +593,8 @@ public void run() { |
558 | 593 | return; |
559 | 594 | } |
560 | 595 |
|
| 596 | + ftp.setFileType(FTP.BINARY_FILE_TYPE); |
| 597 | + |
561 | 598 | InputStream inputStream = ftp.retrieveFileStream(path); |
562 | 599 | if (inputStream == null) { |
563 | 600 | Log.d( |
@@ -635,6 +672,8 @@ public void run() { |
635 | 672 | return; |
636 | 673 | } |
637 | 674 |
|
| 675 | + ftp.setFileType(FTP.BINARY_FILE_TYPE); |
| 676 | + |
638 | 677 | Log.d("FTPUpload", "Destination " + remoteFilePath); |
639 | 678 | OutputStream outputStream = ftp.storeFileStream(remoteFilePath); |
640 | 679 | if (outputStream == null) { |
@@ -977,10 +1016,10 @@ public void run() { |
977 | 1016 | stat.put("isValid", file.isValid()); |
978 | 1017 | stat.put("isUnknown", file.isUnknown()); |
979 | 1018 | stat.put("isDirectory", file.isDirectory()); |
980 | | - stat.put("isSymbolicLink", file.isSymbolicLink()); |
| 1019 | + stat.put("isLink", file.isSymbolicLink()); |
981 | 1020 | stat.put("linkCount", file.getHardLinkCount()); |
982 | 1021 | stat.put("size", file.getSize()); |
983 | | - stat.put("name", file.getName()); |
| 1022 | + stat.put("name", getBaseName(file.getName())); |
984 | 1023 | stat.put("lastModified", file.getTimestamp().getTimeInMillis()); |
985 | 1024 | stat.put("link", file.getLink()); |
986 | 1025 | stat.put("group", file.getGroup()); |
|
0 commit comments