Java REST-在POST到REST之后调用方法

Java REST-在POST到REST之后调用方法,java,web-services,rest,amazon-web-services,Java,Web Services,Rest,Amazon Web Services,我正在使用JavaREST服务进行文件上传。 该文件应该降落在我的服务器上,然后移动到AmazonS3存储桶 上传到服务器是正常的,但是对另一个方法的第二次调用不起作用。 我想是因为有超时问题吧 将文件移动到amazon的代码在另一个应用程序中工作,但我无法在我的REST项目中使其工作 方法如下: @POST @Path("/upload") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response u

我正在使用JavaREST服务进行文件上传。 该文件应该降落在我的服务器上,然后移动到AmazonS3存储桶

上传到服务器是正常的,但是对另一个方法的第二次调用不起作用。
我想是因为有超时问题吧

将文件移动到amazon的代码在另一个应用程序中工作,但我无法在我的REST项目中使其工作

方法如下:

     @POST
     @Path("/upload")
     @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(@FormDataParam("file") InputStream inputStream,
               @FormDataParam("file") FormDataContentDisposition file,    @FormDataParam("filename") String filename){

    Logger log = Logger.getLogger("Mike");


    String response = "";
    File f = null;
      try {
       final String FILE_DESTINATION = "C://uploads//" + file.getFileName();
       f = new File(FILE_DESTINATION);
       OutputStream outputStream = new FileOutputStream(f);
       int size = 0;
       byte[] bytes = new byte[1024];
       while ((size = inputStream.read(bytes)) != -1) {
        outputStream.write(bytes, 0, size);
       }
       outputStream.flush();
       outputStream.close();

       log.info("upload complete for initial file!");
       //move file to Amazon S3 Bucket.
       AmazonS3 s3 = new AmazonS3Client(
                new ClasspathPropertiesFileCredentialsProvider());

       log.info("trying put request");
       PutObjectRequest request = new PutObjectRequest("site.address.org","/pdf/PDF_Web_Service/work/"+f.getName(),f);
        log.info(f.getName());
        log.info(f.getAbsolutePath());

        s3.putObject(request);
        log.info("put request complete");

       response = "File uploaded " + FILE_DESTINATION;
      } catch (Exception e) {
       e.printStackTrace();
      }




      return Response.status(200).entity(response).build();
     }
具体来说,这里是不起作用的部分。我也没有得到任何日志信息:

//move file to Amazon S3 Bucket.
迈克尔

如果这是一个超时问题,通常的做法是使用番石榴将您的任务链接在一起。那么,您的web序列将是什么样子:

a) 客户端发送文件

b) 一旦文件完成上传,服务器将以200作为响应

c) 一旦服务器加载完该文件,未来将继续上载到S3

链接listenable futures是分离功能并确保不会发生超时的常见做法,方法是分解代码并基本上对其进行管道排列


如果您有任何问题,请告诉我

我将Amazon代码移到了try块中,现在它可以工作了。

我假设是因为存在超时问题吗?为什么不捕获http响应代码,以便知道这是问题还是错误not@Humdinger我对休息有点陌生。在我的代码中,我显式地将响应代码设置为200。如何获取“自然”响应代码?当您超时时,您永远不会到达返回语句。Java自动设置并返回超时代码(504)。如果你得到的是一个200返回,这意味着你得到的是返回语句,超时不是你的问题。
     AmazonS3 s3 = new AmazonS3Client(
              new ClasspathPropertiesFileCredentialsProvider());

     log.info("trying put request");
     PutObjectRequest request = new PutObjectRequest("site.address.org","/pdf/PDF_Web_Service/work/"+f.getName(),f);
      log.info(f.getName());          log.info(f.getAbsolutePath());
                  s3.putObject(request);          log.info("put request complete");