我是网络服务新手。我写了一个休息网络服务,创建并返回pdf文件。我的代码如下
@Path("/hello")
public class Hello {
@GET
@Path("/createpdf")
@Produces("application/pdf")
public Response getpdf() {
synchronized(this){
try {
OutputStream file = new FileOutputStream(new File("c:/temp/FirstPdf5.pdf"));
Document document = new Document();
PdfWriter.getInstance(document, file);
document.open();
document.add(new Paragraph("Hello Kiran"));
document.add(new Paragraph(new Date().toString()));
document.close();
file.close();
} catch (Exception e) {
e.printStackTrace();
}
File file1 = new File("c:/temp/FirstPdf5.pdf");
ResponseBuilder response = Response.ok((Object) file1);
response.header("Content-Disposition",
"attachment; filename=new-android-book.pdf");
return response.build();
}
}
}
如果多个客户端尝试同时调用Web服务,它是否会影响我的代码? 我的意思是,如果客户端A使用Web服务,并且同时客户端B尝试使用Web服务,则pdf文件将被覆盖。
如果我的问题不正确,请告诉我
由于
答案 0 :(得分:0)
当您将文件写入硬盘时,对服务的多次调用将导致文件被覆盖或导致文件已被使用的异常。
如果所有用户的文件相同,那么您只需要读取文件而不是每次都写入。
但是,如果每个用户的文件不同,您可以尝试以下两个选项之一:
您可以在内存中构建文件,然后将二进制响应直接写入响应流。
或者,您可以使用唯一名称创建文件,这可以是GUID或随机数,这可以确保您在到达服务器的多个呼叫之间永远不会发生冲突。
我还会确保您删除文件