我想做同樣的在我的web應用程序,並且還試圖與弗里斯特JFileChooser的,也得到了問題,因爲你。然後我用「內容 - 性格」解決了這個問題。工作原理:用戶點擊我應用程序中的按鈕/鏈接,控制器從數據庫中獲取某些內容並將其寫入輸出流。用戶被詢問他是否想要打開該文件或將其保存在計算機上。下面是我如何做,在我的應用程序:
@Controller
public class ExportPhonebook extends HttpServlet {
private static final long serialVersionUID = 1L;
@Autowired
private PhoneBookService phoneBookSer;
private void setResponseHeaderTXT(HttpServletResponse response) {
response.setContentType("text/plain; charset=UTF-8");
response.setHeader("content-disposition", "attachment; filename=imenik.txt");
}
@RequestMapping(value = "/exportPhonebook.html", method = RequestMethod.POST)
public void exportPhonebook(Model model, HttpServletResponse response, HttpServletRequest request) {
List<User> listOfAllUsers = phoneBookSer.fetchAllUsers();
String imenik = "";
for (User user : listOfAllUsers) {
imenik = imenik + user.getPrezime() + " " + user.getIme() + ", Organizacijska jedinica: " + user.getOrganizacijskaJedinica() +
", Telefon: " + user.getTelefon() + ", Faks: " + user.getTelefaks() + ", Email: " + user.getEmail() +
", Lokacija: " + user.getLokacija() + ", Kat: " + user.getKat() + ", Soba: " + user.getBrojSobe() + ";\r\n" ;
}
try {
setResponseHeaderTXT(response);
OutputStream outputStream = response.getOutputStream();
outputStream.write(imenik.getBytes(Charset.forName("UTF-8")));
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
我已經做了類似的事情PDF文件:
@Controller
public class ExportPhonebook extends HttpServlet {
private static final long serialVersionUID = 1L;
@Autowired
private PhoneBookService phoneBookSer;
private void setResponseHeaderPDF(HttpServletResponse response) {
response.setContentType("application/pdf");
response.setHeader("content-disposition", "attachment; filename=imenik.pdf");
}
@RequestMapping(value = "/exportPhonebook.html", method = RequestMethod.POST)
public void exportPhonebook(Model model, HttpServletResponse response, HttpServletRequest request) {
try {
setResponseHeaderPDF(response);
Document document = new Document();
ByteArrayOutputStream baosPDF = new ByteArrayOutputStream();
PdfWriter pdfWriter = null;
pdfWriter = PdfWriter.getInstance(document, baosPDF);
PageNumbersEventHelper events = new PageNumbersEventHelper();
pdfWriter.setPageEvent(events);
document.open();
addMetaData(document);
addTitlePage(document);
ServletContext servletContext = request.getSession().getServletContext();
String relativeWebPath = "img/image.png";
String absoluteDiskPath = servletContext.getRealPath(relativeWebPath);
Image image = Image.getInstance(absoluteDiskPath);
image.setAbsolutePosition(450, 700);
document.add(image);
addContent(document);
document.close();
pdfWriter.close();
OutputStream os = response.getOutputStream();
baosPDF.writeTo(os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我沒有抄在我爲我的PDF文件創建內容的幾種方法,但我認爲你不需要那樣。
你打算讓客戶瀏覽你的服務器文件系統嗎? –
不,我使用jfilechooser爲客戶端提供路徑來存儲客戶端系統內的文件 – ferenit
這是因爲退出文件選擇器的代碼已在服務器上執行。您需要使用小程序才能使其在客戶端上運行,但他們無法看到服務器上的文件 – MadProgrammer