谁人不识我千夜 2024-05-05 10:00 采纳率: 43.3%
浏览 13
已结题

用windows做服务的同志有吗

因为我在本地自己windows环境上适配wav转换silk格式的文件,但是linux试了好久达不到我想要的功能,所以这样,我给你两个文件夹,一个文件夹下三个exe文件,然后一个文件夹下一个工具类,我想要,然后你把这接口暴露出来,我去调用,有没有可以配合的同志

  • 写回答

17条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-05 10:29
    关注

    引自免费微信小程序:皆我百晓生

    在Windows环境下部署Java服务并实现特定功能(如您提到的WAV文件转换为SILK格式)是完全可行的。根据您的需求,这里是一个简化的步骤指南,帮助您将这些操作整合到一个可调用的服务中:

    准备工作

    1. 确保Java环境配置正确:首先确认您的Windows服务器上已安装适合的JDK版本,并设置好JAVA_HOME环境变量。

    2. 放置EXE文件和Java工具类:将提供的EXE文件置于一个指定目录,比如C:\audio-tools,并将Java工具类放到项目的src目录下适当位置。

    创建Java服务

    1. 编写服务接口和实现:首先定义一个Java接口,描述您需要暴露的功能,比如文件转换方法。然后,实现这个接口,内部调用外部EXE程序完成转换任务。
    // 文件转换服务接口
    public interface AudioConversionService {
        byte[] convertWavToSilk(byte[] wavData);
    }
    
    // 实现类,调用外部EXE进行转换
    public class SilkConversionServiceImpl implements AudioConversionService {
        // 假设convertExePath是exe文件的完整路径
        private static final String CONVERT_EXE_PATH = "C:\\audio-tools\\convert.exe";
    
        @Override
        public byte[] convertWavToSilk(byte[] wavData) {
            // 这里需要根据实际EXE的使用方式编写调用逻辑,可能涉及文件临时存储、进程执行等
            // 以下代码仅为示意,实际情况需根据EXE的具体使用手册调整
            try {
                // 保存WAV数据到临时文件
                File tempWav = File.createTempFile("tempWav", ".wav");
                Files.write(tempWav.toPath(), wavData);
    
                // 构建命令行参数
                ProcessBuilder pb = new ProcessBuilder(CONVERT_EXE_PATH, tempWav.getAbsolutePath(), "output.silk");
                pb.redirectErrorStream(true); // 重定向错误输出到标准输出
    
                Process process = pb.start();
                int exitCode = process.waitFor();
    
                if (exitCode == 0) {
                    // 读取转换后的SILK文件内容
                    return Files.readAllBytes(new File("output.silk").toPath());
                } else {
                    // 处理错误情况
                    throw new RuntimeException("Conversion failed with exit code: " + exitCode);
                }
            } catch (IOException | InterruptedException e) {
                throw new RuntimeException("Conversion failed", e);
            }
        }
    }
    

    暴露为Web服务

    您可以使用Spring Boot等框架快速创建一个RESTful API来暴露上述服务接口。

    1. 添加Spring Boot依赖:在pom.xml中加入Spring Boot和相关依赖。

    2. 创建Spring Boot应用:编写一个主类启动Spring Boot应用,并配置相应的API端点。

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    public class AudioConversionApp {
    
        private final AudioConversionService conversionService;
    
        public AudioConversionApp(AudioConversionService conversionService) {
            this.conversionService = conversionService;
        }
    
        public static void main(String[] args) {
            SpringApplication.run(AudioConversionApp.class, args);
        }
    
        @PostMapping("/convert/wav-to-silk")
        public byte[] convertWavToSilk(@RequestBody byte[] wavData) {
            return conversionService.convertWavToSilk(wavData);
        }
    }
    

    部署与测试

    • 使用IDE或命令行打包项目为jar文件。
    • 在Windows服务器上运行该jar文件,如使用java -jar your-app.jar
    • 通过Postman或类似工具向http://your-server-ip:port/convert/wav-to-silk发送POST请求,携带WAV文件的二进制数据,以测试服务是否正常工作。

    请注意,直接执行外部EXE并处理文件I/O存在安全风险,实际应用中需考虑权限控制、异常处理及资源清理等方面。此外,根据EXE的具体使用要求,上述示例代码可能需要相应调整。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月6日
  • 赞助了问题酬金15元 5月5日
  • 创建了问题 5月5日

悬赏问题

  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输