我正在使用spring編寫REST webserivce。我必須在回覆中返回一個文件。使用java的基於REST的web服務中的文件響應
它是一個GET調用,當用戶輸入URL時,用戶應該在瀏覽器中顯示下載部分。
我不知道控制器中應該有什麼樣的返回類型。我是否必須指定任何內容類型我的代碼?
我正在使用spring編寫REST webserivce。我必須在回覆中返回一個文件。使用java的基於REST的web服務中的文件響應
它是一個GET調用,當用戶輸入URL時,用戶應該在瀏覽器中顯示下載部分。
我不知道控制器中應該有什麼樣的返回類型。我是否必須指定任何內容類型我的代碼?
我用下面的代碼片段
FileInputStream inputStream = new FileInputStream("FileInputStreamDemo.java"); //read the file
response.setHeader("Content-Disposition","attachment; filename=test.txt");
try {
int c;
while ((c = inputStream.read()) != -1) {
response.getWriter().write(c);
}
} finally {
if (inputStream != null)
inputStream.close();
response.getWriter().close();
}
這是在一個更線程發現
how to write a file object on server response and without saving file on server?
您的控制器方法可以具有您想要的任何名稱,它會返回一個字符串,其中的url名稱在您要加載的視圖(本例中爲下載部分)定義的views.xml中定義。 所以你的控制器看起來是這樣的:
@Controller
public class MyController {
@RequestMapping(value = "/downloads", method = RequestMethod.GET)
public String getDownloadSection() {
System.out.println("getting downloads");
return "downloads/index";
}
}
你views.xml應包含標籤:
<definition extends="default" name="downloads/index">
<put-attribute name="body" value="/WEB-INF/views/downloads/index.jspx"/>
</definition>
的延伸=「默認」是平鋪定義,應該是在你的佈局。 xml
我認爲這是關於它。如果你做了一個GET請求//你的/下載它應該打印消息。
這應該回答你的問題,我希望:)
我有類似的要求在我的項目中。我用下面的代碼片段
@Controller
@RequestMapping("/reports")
public class ReportsController {
protected static String PRODUCTIVITY_REPORT_FILE = "productivityReportFile";
@Resource(name="propertyMap")
protected Map<String, String> propertyMap;
@RequestMapping(value="/cratl/productivity_report", method=RequestMethod.GET, produces="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
public @ResponseBody byte[] getProductivityReport()
throws Exception {
byte[] reportBytes = null;
try {
File reportFile = new File(propertyMap.get(PRODUCTIVITY_REPORT_FILE));
if (reportFile != null && reportFile.exists()) {
InputStream reportInputStream = new FileInputStream(reportFile);
long length = reportFile.length();
reportBytes = new byte[(int)length];
int offset = 0;
int numRead = 0;
while (offset < reportBytes.length
&& (numRead = reportInputStream.read(reportBytes, offset, reportBytes.length-offset)) >= 0) {
offset += numRead;
}
if (offset < reportBytes.length) {
throw new Exception("Could not completely read file "+ reportFile.getName());
}
reportInputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return reportBytes;
}
我希望它能幫助你
任何人都可以解釋爲什麼這一個得分-1 –
感謝您的幫助。我也會嘗試這:) – user1332962