내 응용 프로그램에서 클라이언트 측에 json 객체가 만들어집니다. 이 객체는 POST 데이터를 기반으로 pdf 파일을 만드는 HttpServlet에 게시됩니다.Jquery로 httpServlet에서 파일을 다운로드하는 방법은 무엇입니까?
파일이 사용자에게 다시 전송됩니다. succes 함수가 호출되고 스트림 데이터가 기록됩니다. 그러나 그 파일이 다운로드되기를 원합니다.
어떻게해야합니까?
내 클라이언트 측 코드 :
$(document).ready(function() {
// when the print button is clicked
$('#exportButton').click(function() {
var tableIdx = performanceDetailTableController.getTableIdx();
var allData = {
"shipTable1":{
"rows":[
{ "latitude":"12323","longitude":"213213"},
{ "latitude":"213213","longitude":"543543"}
]},
"shipTable2":{
"rows":[
{ "latitude":"12323", "longitude":"213213"},
{ "latitude":"213213","longitude":"543543"}
]}
}
var postData = JSON.stringify(allData);
$.ajax({
type : "POST",
url : 'pdfServlet',
contentType: "application/json; charset=utf-8",
data : postData,
async : false,
success : function(data) {
alert("got some data");
console.log(data);
},
});
});
});
그리고 파일 생성 서블릿 : 포인터
에 대한 *가 http://www.particletree.com/notebook/ajax-file-download-or-not/ 참조 :
%PDF-1.4
%
4 0 obj
<<
/Producer (Apache FOP Version SVN branches/fop-0_95)
/CreationDate (D:20130725162007+02'00')
>>
endobj
5 0 obj
<<
/N 3
/Length 11 0 R
/Filter /FlateDecode
>>
stream
xwTSϽ7PhRHH.*1 J
* MY 해결책 :
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// get the json content
StringBuffer jsonContent = getPostedContent(request);
log.info(jsonContent.toString());
// convert json to pojo's
Tables tables = getTablesFromString(jsonContent);
// create a xml stream
ByteArrayOutputStream xml = new XmlConverter().getXMLSource(tables);
// put the xml on the request
request = setXmlOnRequest(request, xml);
// create pdf data of the pdf-able xml content
ByteArrayOutputStream pdf = new PdfHandler().createPdfDataStream(request);
// response = createResponseheaders(response, request);
response.setContentType("application/pdf");
response.setContentLength(pdf.size());
response.setHeader("Content-disposition", "attachment; filename=test.pdf");
response.setCharacterEncoding("utf-8");
response.getOutputStream().write(pdf.toByteArray());
//close the streams
pdf.close();
response.getOutputStream().close();
}
로그의 OUPUT을
하나의 양식을 만들었습니다. 숨겨진 필드 : 내가 내 JQuery와 데이터 후 컨트롤러를 변경보다
<button id="exportButton">export</button>
<form id="exportForm" method="post" action="pdfServlet">
<input type="hidden" value="empty" id="pdf_data" name="pdf_data" />
</form>
: 내가 내보내기 버튼을 클릭하면 이제
$('#exportButton').click(function() {
var tableIdx = performanceDetailTableController.getTableIdx();
var allData = {
"shipTable1":{
"rows":[
{ "latitude":"12323","longitude":"213213"},
{ "latitude":"213213","longitude":"543543"}
]},
"shipTable2":{
"rows":[
{ "latitude":"12323", "longitude":"213213"},
{ "latitude":"213213","longitude":"543543"}
]}
}
var postData = JSON.stringify(allData);
// put the data on the hidden form field in the export form
$('#pdf_data').val(postData);
// and submit the form
$('#exportForm').submit();
});
양식의 숨겨진 필드는 게시 할 데이터와 데이터를 가져옵니다 인코딩 된 형태로 게시됩니다.
이렇게하면 서블릿이 요청을 처리 할 수 있고 파일이 클라이언트로 다운로드됩니다.
ajax로 파일을 강제로 다운로드 할 수 없습니다. –
Ajax 응답은 파일을 다운로드 할 수 없습니다. – NINCOMPOOP