Разработчик, я новичок в загрузке Spring, и я создаю веб-API, который даст pdf в качестве ответа, но я столкнулся с одной проблемой.Когда я одновременно использую конечную точку localhost:8080/download?param=abc.pdf
со своего мобильного телефона и ноутбука, API выдает ошибку, означающую, что эта конечная точка может не работать асинхронно.Это мой MainClass, где приложение запускается
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MywebapiApplication {
public static void main(String[] args) {
SpringApplication.run(MywebapiApplication.class, args);
}
}
И моя конечная точка
@RestController
public class UserController {
String downloadfile;
String processfile;
@RequestMapping(value = "/download",method = RequestMethod.GET)
public ResponseEntity<ByteArrayResource> downloadFile2(@RequestParam(value="param1", required=true) String filename) throws IOException {
try {
System.out.println("File name is 1 "+filename);
//downloadfile= "R:\\"+randomstring()+".pdf";
downloadfile= new File("static/pdf").toString()+randomstring()+".pdf";
processfile=new File("static/pdf").toString()+randomstring()+".pdf";
downloadUsingNIO(fillspace(filename), downloadfile);
PDFDocument pdfDoc = new PDFDocument(downloadfile, null);
for(int i=0;i<=pdfDoc.getPageCount()-1;i++) {
PDFPage page = pdfDoc.getPage(i);
double crop_width = 2000;
double crop_height = 800;
double x_1 = 0;
double y_1 = 25;
Rectangle2D.Double area = new Rectangle2D.Double(x_1, y_1, crop_width, crop_height);
page.setCropBox(area);
}
pdfDoc.saveDocument(processfile);
Path path = Paths.get(processfile);
byte[] data = Files.readAllBytes(path);
ByteArrayResource resource = new ByteArrayResource(data);
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION,
"attachment;filename=" + path.getFileName().toString())
.contentType(MediaType.APPLICATION_PDF).contentLength(data.length)
.body(resource);
}
catch (IOException ex)
{
System.out.println("File name is 1 "+filename);
System.out.println("ERROR IS "+ex.toString());
ByteArrayResource res=new ByteArrayResource("Not Found PDF".getBytes());
return ResponseEntity.badRequest().body(res);
}
catch (PDFException e) {
e.printStackTrace();
ByteArrayResource res=new ByteArrayResource("Not Found PDF".getBytes());
return ResponseEntity.badRequest().body(res);
}
finally {
File file =new File(downloadfile);
file.delete();
File file1=new File(processfile);
file1.delete();
}
}
Так как сделать это асинхронно, чтобы дать ответ PDF, если несколько (100) пользователь нажалэта localhost:8080/download?param1=
конечная точка одновременно.PDF может быть больше по размеру, чтобы дать ответ.