美文网首页AndroidAndroid
AndServer 简单使用

AndServer 简单使用

作者: 炫子_260f | 来源:发表于2022-10-25 11:37 被阅读0次

    AndServerAndroid 平台的 Web ServerWeb Framework。 它基于编译时注解提供了类似 SpringMVC 的注解和功能,如果您熟悉 SpringMVC,则可以非常快速地掌握它。

    引用

    1. project build.gradle
    buildscript {
        repositories {
            google()
            mavenCentral()
        }
    
        dependencies {
            classpath 'com.yanzhenjie.andserver:plugin:2.1.10'
            ...
        }
    }
    
    allprojects {
        repositories {
            google()
            mavenCentral()
        }
    }
    
    1. module build.gradle
    plugins {
        id 'com.android.application'
        id 'com.yanzhenjie.andserver'
    }
    ...
    
    dependencies {
        implementation 'com.yanzhenjie.andserver:api:2.1.10'
        annotationProcessor 'com.yanzhenjie.andserver:processor:2.1.10'
        ...
    }
    

    部署

    AndServer 提供启动、停止、网络地址与端口监听、连接超时配置、SSL、状态监听、Socket 的一些优化配置等

    Server mServer= AndServer.webServer(context)
        .port(8080)
        .timeout(10, TimeUnit.SECONDS)
        .build();
    
    /**
     * Start server.
     */
    public void startServer() {
        if (mServer.isRunning()) {
            // TODO The server is already up.
        } else {
            // startup the server.
            mServer.startup();
        }
    }
    /**
     * Stop server.
     */
    public void stopServer() {
        if (mServer.isRunning()) {
             // shutdown the server.
            mServer.shutdown();
        } else {
            Log.w("AndServer", "The server has not started yet.");
        }
    }
    

    使用

    1. 返回String
    @RestController
    public class UserController {
        @GetMapping("/user/info")
        String getAccount(@RequestParam("account") String account,HttpRequest request,HttpResponse response) {
            if("123".equals(account)) {
                response.setStatus(200);
                return "123 Login";
            } else {
                response.setStatus(400);
                return "Login failed.";
            }
        }
        @PostMapping("/user/login")
        String login(@RequestParam("account") String account,
            @RequestParam("password") String password) {
            if("123".equals(account) && "123".equals(password)) {
                return "Login successful.";
            } else {
                return "Login failed.";
            }
        }
    }
    
    1. 返回Json
    @RestController
    public class UserController {
    
        /**
         * Get user information.
         */
        @GetMapping("/user/info")
        String userList(@RequestParam("id") String id) {
            User user = new User();
            user.setId(id);
            user.setName("AndServer");
            return JSON.toJSONString(user);
        }
    
        /**
         * Get user list.
         */
        @GetMapping("/user/get")
        JSONObject userList() {
            JSONObject jsonObj = ...;
            return jsonObj;
        }
    }
    
    1. MultipartFile
        // 单个文件
        @PostMapping(path = "/upload")
        void upload(@RequestParam(name = "file") MultipartFile file) throws IOException {
            String fileName = file.getName();
            log( "/upload", fileName);
        }
    
    
        //多个文件
        @PostMapping(path = "/file/uploadMore")
        String uploadMoreFile(HttpRequest request,HttpResponse response) throws IOException {
            StandardMultipartRequest standardMultipartRequest = (StandardMultipartRequest)request;
            Map<String, MultipartFile> files = standardMultipartRequest.getFileMap();
    
            Map<String, String> saveFile = writeFile(files);
    
            return "OK";
        }
    
        //保存转移文件
        private Map<String, String> writeFile(Map<String, MultipartFile> fileMap){
            Map<String, String> saveFileInfo = new HashMap<>();
            for (String s: fileMap.keySet()) {
                MultipartFile f = fileMap.get(s);
                log("/writeFile", s +", "+ f.getFilename());
    
                try {
                    f.transferTo(new File(Cons.getPath(f.getFilename())));
                    saveFileInfo.put(s, f.getFilename());
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
            return saveFileInfo;
        }
    
    

    疑问点是,按照文件,在 Config 中配置了 文件保存目录,但是
    .uploadTempDir(new File(context.getCacheDir(), "_server_upload_cache_")) // 文件保存目录 配置的保存路径下,没有保存收到的文件,所以只能使用transferTo(File),转移该文件到目标位置 来转移文件了

    文档这样写,还蛮疑惑的


    image.png
    @Config
    public class AppConfig implements WebConfig {
    
        @Override
        public void onConfig(Context context, Delegate delegate) {
            // 增加一个静态网站
            delegate.addWebsite(new AssetsWebsite(context, "/web"));
    
            // 自定义配置表单请求和文件上传的条件
            delegate.setMultipart(Multipart.newBuilder()
                .allFileMaxSize(1024 * 1024 * 20) // 单个请求上传文件总大小
                .fileMaxSize(1024 * 1024 * 5) // 单个文件的最大大小
                .maxInMemorySize(1024 * 10) // 保存上传文件时buffer大小
                .uploadTempDir(new File(context.getCacheDir(), "_server_upload_cache_")) // 文件保存目录
                .build());
        }
    }
    

    相关文章

      网友评论

        本文标题:AndServer 简单使用

        本文链接:https://www.haomeiwen.com/subject/gvrazrtx.html