Utilizzo Spring boot e Angular JS. Ho un controller Spring REST che utilizzo per scaricare un file. quando lo chiamo usando http://localhost:8080/download funziona e il file viene scaricato. Ora ho un pulsante, quando clicco su di esso, il file verrà scaricato. così ho scritto una funzione nel mio controller angular js per ottenere l'url del mio servizio web di primavera ma quando l'ho provato non è successo niente. Cosa devo fare per risolvere il problema? C'è un modo migliore per scaricare file usando Spring e Angular?scaricare un file utilizzando Angular JS e un servizio Web RESTful basato su Spring
/**
* Size of a byte buffer to read/write file
*/
private static final int BUFFER_SIZE = 4096;
private String filePath = "C:\\Users\\marwa\\Desktop\\marwa\\gg.jpg";
/**
* Method for handling file download request from client
*/
@RequestMapping (value="/download", method=RequestMethod.GET)
public void doDownload(HttpServletRequest request,
HttpServletResponse response) throws IOException {
// get absolute path of the application
ServletContext context = request.getServletContext();
String appPath = context.getRealPath("");
System.out.println("filepath = " + filePath);
// construct the complete absolute path of the file
File downloadFile = new File(filePath);
FileInputStream inputStream = new FileInputStream(downloadFile);
// get MIME type of the file
String mimeType = context.getMimeType(filePath);
if (mimeType == null) {
// set to binary type if MIME mapping not found
mimeType = "application/octet-stream";
}
System.out.println("MIME type: " + mimeType);
// set content attributes for the response
response.setContentType(mimeType);
response.setContentLength((int) downloadFile.length());
// set headers for the response
String headerKey = "Content-Disposition";
String headerValue = String.format("attachment; filename=\"%s\"",
downloadFile.getName());
response.setHeader(headerKey, headerValue);
// get output stream of the response
OutputStream outStream = response.getOutputStream();
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead = -1;
// write bytes read from the input stream into the output stream
while ((bytesRead = inputStream.read(buffer)) != -1) {
outStream.write(buffer, 0, bytesRead);
}
inputStream.close();
outStream.close();
}
mia angolare funzione js (ho aggiunto console.log ("ok") per vedere se ho un risultato dal controller primavera ed è stampato ok)
$scope.downloadFile = function() {
$http({method: 'GET', url: '/download'}).
success(function(result) {
console.log("ok");
}).
error(function(data, status, headers, config) {
console.log("oops");
});
};
e il mio tasto
<button class="btn btn-success" ng-click="downloadFile()">download</button>
Non sono sicuro che sia d'aiuto, ma potresti voler controllare questo: http://stackoverflow.com/questions/17177303/spring-download-response-as-a-file –