Java REST-在POST到REST之后调用方法
我正在使用JavaREST服务进行文件上传。 该文件应该降落在我的服务器上,然后移动到AmazonS3存储桶 上传到服务器是正常的,但是对另一个方法的第二次调用不起作用。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
我想是因为有超时问题吧 将文件移动到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");