我设置了一个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就会知道将其与指示的端点相匹配。