Appearance
使用方法
介绍
安卓FTP上传下载操作原生插件,支持整个目录下载,整个目录上传,获取文件列表,上传下载进度监听等,插件提供了选择文件和选择目录的方法,插件支持uniapp和uniapp x
插件说明
- 如果您在使用插件的过程中有任何问题,可以联系作者,作者将全力协助您只用插件
- 本文档同时提供了uniapp的用法示例和uniappx的用法示例,插件市场导入的示例项目仅为uniapp的用法示例,如果您需要uniappx的示例项目可以通过下方的链接下载示例
联系作者

关注微信公众号可联系作者
插件地址
https://ext.dcloud.net.cn/plugin?id=28784
权限
- android.permission.INTERNET
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.READ_EXTERNAL_STORAGE
- android.permission.MANAGE_EXTERNAL_STORAGE
用法
在需要使用插件的页面加载以下代码
js
import * as module from "@/uni_modules/leven-uts-ftp"js
import * as module from "@/uni_modules/leven-uts-ftp"页面内容
vue
<template>
<view class="content">
<uni-card title="登录FTP服务器">
<view style="margin-bottom: 16px;">
<uni-section title="服务器地址">
<uni-easyinput v-model="loginParams.address" placeholder="请输入用户名"></uni-easyinput>
</uni-section>
<uni-section title="端口号">
<uni-easyinput v-model="loginParams.port" placeholder="请输入端口号"></uni-easyinput>
</uni-section>
<uni-section title="用户名">
<uni-easyinput v-model="loginParams.username" placeholder="请输入用户名"></uni-easyinput>
</uni-section>
<uni-section title="密码">
<uni-easyinput v-model="loginParams.password" type="password" placeholder="请输入密码"></uni-easyinput>
</uni-section>
</view>
<button type="primary" @click="login">登录</button>
</uni-card>
</view>
</template>
<script>
import * as module from "@/uni_modules/leven-uts-ftp"
export default {
data() {
return {
loginParams: {
//连接地址
address: "120.77.175.16",
username: "leven",
password: "dA5W3h6sL4zcynJY",
port: 21,
keepAlive: true
}
}
},
methods: {
//显示消息
showMessage(message) {
uni.showToast({
title: message,
icon: "none"
})
},
//登录
login() {
uni.showLoading({
title: "正在登录,请稍后..."
})
module.connect({
params: this.loginParams,
complete: (res) => {
uni.hideLoading();
if (res.code == 0) {
//登录成功后保存服务器名称到缓存
uni.setStorageSync("serverAddress", this.loginParams.address + ":" + this.loginParams.port)
uni.redirectTo({
url: "/pages/index/home"
})
} else {
this.showMessage(res.message)
}
}
})
},
}
}
</script>
<style>
</style>vue
<template>
<!-- #ifdef APP -->
<scroll-view style="flex:1">
<!-- #endif -->
<lux-card title="登录FTP服务器">
<view style="margin-bottom: 16px;">
<lux-section text="服务器地址">
<rice-input v-model="loginParams.address" placeholder="请输入用户名"></rice-input>
</lux-section>
<lux-section text="端口号">
<rice-input v-model="loginParams.port" placeholder="请输入端口号"></rice-input>
</lux-section>
<lux-section text="用户名">
<rice-input v-model="loginParams.username" placeholder="请输入用户名"></rice-input>
</lux-section>
<lux-section text="密码">
<rice-input v-model="loginParams.password" type="password" placeholder="请输入密码"></rice-input>
</lux-section>
</view>
<button type="primary" @click="login">登录</button>
</lux-card>
<!-- #ifdef APP -->
</scroll-view>
<!-- #endif -->
</template>
<script setup>
import * as module from "@/uni_modules/leven-uts-ftp"
import { LevenOptions, LevenResult } from "@/uni_modules/leven-uts-ftp"
type LoginParamsType = {
address : string,
username : string,
password : string,
port : string,
keepAlive : boolean
}
const loginParams = ref<LoginParamsType>({
address: "120.77.175.16",
username: "leven",
password: "dA5W3h6sL4zcynJY",
port: "21",
keepAlive: true
})
//显示消息
function showMessage(message : string) {
uni.showToast({
title: message,
icon: "none"
})
}
//登录
function login() {
uni.showLoading({
title: "正在登录,请稍后..."
})
let params : UTSJSONObject = JSON.parse(JSON.stringify(loginParams.value)) as UTSJSONObject
module.connect({
params: params,
complete: (res : LevenResult) => {
uni.hideLoading();
if (res.code == 0) {
//登录成功后保存服务器名称到缓存
uni.setStorageSync("serverAddress", loginParams.value.address + ":" + loginParams.value.port)
uni.redirectTo({
url: "/pages/ftp/home"
})
} else {
showMessage(res.message)
}
}
} as LevenOptions)
}
function toAllFilesPermissionPage() {
module.toAllFilesPermissionPage({
complete: (res : LevenResult) => {
if (res.code == 0) {
let data = res.data;
let status = data.getBoolean("status")!;
if (!status) {
showMessage("所有文件访问权限未打开")
} else {
showMessage("权限申请完成,可以使用插件")
}
} else {
showMessage(res.message)
}
}
} as LevenOptions)
}
function checkAllFilesPermission() {
module.checkAllFilesPermission({
complete: (res : LevenResult) => {
if (res.code == 0) {
let data = res.data;
let status = data.getBoolean("status")!;
if (!status) {
toAllFilesPermissionPage();
} else {
showMessage("权限申请完成,可以使用插件")
}
} else {
showMessage(res.message)
}
}
} as LevenOptions)
}
//申请插件所需权限
function requestPermissions() {
module.requestPermissions({
params: {
permissions: [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE"
]
},
complete: (res : LevenResult) => {
if (res.code == 0) {
//判断是否有所有文件访问权限
checkAllFilesPermission();
} else {
showMessage(res.message)
}
}
} as LevenOptions)
}
onMounted(() => {
nextTick(() => {
requestPermissions();
})
})
</script>
<style>
</style>