如何使用Java从使用Glassfish和REST协议设置的Amazon AWS服务器中检索文件



我设置了一个Amazon AWS Linux服务器实例(EC2),其中包含一些我想使用REST协议web服务检索的音频文件。由于某些原因,我的getAudio函数的URL不正确。

@Path("/get/{fileName}") // http://IP.ADDRESS/audio/get/{fileName}
@GET
@Produces("application/wav")
public Response getAudio(@PathParam("fileName") String fileName) {
    ResponseBuilder response = null;
    StringBuilder builder = new StringBuilder();
    builder.append(AUDIO_PATH).append(fileName).append(".wav");
    File file = new File(builder.toString());
    response = Response.ok(file);
    response.header("Content-Disposition", "attachment; filename=" + fileName + ".wav")
            .header("Access-Control-Allow-Origin", "*");
    return response.build();
}

AUDIO_PATH是最后一个String变量,它包含Linux实例中创建的音频文件的相关路径。

关于Glassfish,这是一个应用程序服务器,可以让我部署由该功能以及其他一些工作功能组成的web服务。

当我使用Glasish运行一个我知道输入正确的URL时,会出现404错误,表示找不到该URL。我在我的亚马逊管理控制台中创建了一个允许HTTP协议的安全异常。

我用来尝试访问此getAudio函数的URL是:http://IP.ADDRESS.OF.AWS.INSTANCE:80/audio/get/hello

这个端口号是80,因为当你为HTTP协议添加一个安全异常时,这就是它所说的要使用的端口号。在Linux实例的/audio_PATH/路径中还有一个已经创建的名为"hello.wav"的音频文件,我正试图在URL中下载它。

顺便说一句,但我正在IntelliJ IDE中使用Glassfish运行我的程序,该IDE还包含一个createAudio函数,路径为:@Path("/create/{fileName}/{text}")

这个函数可以根据输入的文本创建音频,但我无法从实例中下载音频。

您收到任何响应的事实表明您的安全组(防火墙)允许您的请求通过EC2服务器。如果存在安全组问题,您的连接将一直挂起,直到超时。

您的代码看起来像是在使用Jersey。您可能需要在GET请求中包含一个Accept: application/wav头,这样Jersey就会知道将其与指示的端点相匹配。

最新更新