2016-04-14 16 views
0

私はSpring(Springセキュリティ、Spring Controller e MVC)をベースにしたプロジェクトを持っていますので、HTMLページではファイルのダウンロードを許可する必要があります。ブラウザのファイルをサーバーからRest Webサービスを経由してダウンロード

<a href="#" target="'+row.idCar+'" id="logName" name="logDownload"> <i class="fa fa-file-text-o fa-2x" aria-hidden="true"></i></a>' 

私はイベントを処理し、私のコントローラでjquery plugin

var input = $(this), 
     idCar= $(this).attr('target'); 
     $.fileDownload("../download/" + idCar , { 
      successCallback: function (url) { 
      }, 
      failCallback: function (HttpServletResponse, url) { 
       notifyMessage("Error downloading file", 'error'); 
      } 
     }); 
     return false; //this is critical to stop the click event which will trigger a normal file download! 

に基づいて、このコードを使用します:

@Override 
@RequestMapping(value="/download/{idCar}", method = RequestMethod.GET) 
public void download(HttpServletResponse response, @PathVariable("idCar") int idCar) { 
    try{ 
     File file = fleetAndCarService.getLogFile(idCar); 
     try(InputStream is = new FileInputStream(file.getAbsolutePath())) { 
      response.setHeader("Set-Cookie", "fileDownload=true; path=/"); 
      response.setHeader("Content-Disposition", 
         "attachment; filename=\"" + "AcquisitionLog.txt" + "\""); 
      org.apache.commons.io.IOUtils.copy(is, 
         response.getOutputStream()); 
      response.flushBuffer(); 
     } catch (Exception e1) { 
      ErrorResponse errorResponse= ErrorResponseBuilder.buildErrorResponse(e1); 
      LOG.error("Threw exception in FleetAndCarControllerImpl::download :" + errorResponse.getStacktrace()); 
     } 
    }catch(Exception e){ 
     ErrorResponse errorResponse= ErrorResponseBuilder.buildErrorResponse(e); 
     LOG.error("Threw exception in FleetAndCarControllerImpl::download :" + errorResponse.getStacktrace()); 
    } 
} 

をしかし、それは春のセキュリティのように問題を持って、この上のユーザーのクリックが この投稿x-frameとInternet Explorerでは動作しません。 プラグインを使用せずにサーバーに保存されているファイルをダウンロードする方法はありますか? おかげ

を解決済み:Hansrajが助けてくれたし、これは、作業コードです:私は、WebサービスのURLとHREFを使用HTMLで

try{ 
      File file = fleetAndCarService.getLogFile(idCar); 
      try(InputStream is = new FileInputStream(file.getAbsolutePath())){ 
       response.setHeader("Expires", "0"); 
       response.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0"); 
       response.setContentType("text/plain"); 
       response.setHeader("Content-Description"," File Transfer"); 
       response.setHeader("Content-Disposition","attachment; filename="+"AcquisitionLog.txt"); 
       response.setHeader("Content-Transfer-Encoding"," binary"); 
       long size = Utils.stream(is, response.getOutputStream()); 
       response.addHeader("Content-Length", Long.toString(size)); 
       response.flushBuffer(); 
      }catch (Exception e1){ 
       ErrorResponse errorResponse= ErrorResponseBuilder.buildErrorResponse(e1); 
       LOG.error("Threw exception in FleetAndCarControllerImpl::download :" + errorResponse.getStacktrace()); 
      } 
     }catch (Exception e) { 
      ErrorResponse errorResponse= ErrorResponseBuilder.buildErrorResponse(e); 
      LOG.error("Threw exception in FleetAndCarControllerImpl::download :" + errorResponse.getStacktrace()); 
     } 

。 Utilsはこのクラスで提案されたクラスですpost

+0

このサンプルを試すことができますかどのようなエラーが出ますか? –

+0

がエラーで動作し、エッジダウンロード時に私に与えられません SCRIPT5009: 'goToLocalizedErrorPage'が未定義です。forbidframingedge.htm(13,15)、エクスプローラが起動せず、エラーが表示されません。 – luca

答えて

1

私のために働くサンプルコードです。あなたは正確に、どのように "動作しない"?

package com.mti.controller.booking; 

import java.io.ByteArrayInputStream; 
@Controller 
@RequestMapping(value = "/offlineBooking") 
public class OfflineBookingController { 
@RequestMapping(value = "/getInvoice") 
public void getInvoice(ModelMap modelMap, @RequestParam(value = "bookingId", required = true) Integer bookingId, 
     HttpServletResponse response) throws Exception { 
    Document document = new Document(); 
    InputStream is = null; 
    PdfWriter writer = null; 
    try{ 
    String everything = bookingService.getBookingInvoiceData(bookingId); 
    is = new ByteArrayInputStream(everything.getBytes("UTF-8")); 
    response.setHeader("Expires", "0"); 
    response.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0"); 
    response.setHeader("Pragma", "public"); 

    response.setContentType("application/pdf"); 
    response.setHeader("Content-Description"," File Transfer"); 
    response.setHeader("Content-Disposition","attachment; filename="+"BookingInvoice"+ bookingId+".pdf"); 
    response.setHeader("Content-Transfer-Encoding"," binary"); 
    writer = PdfWriter.getInstance(document, response.getOutputStream()); 
    document.open(); 
    XMLWorkerHelper.getInstance().parseXHtml(writer, document, is); 
    writer.flush(); 
    response.flushBuffer(); 
    }catch (Exception e) { 
     logger.error("Error in generating invoice " , e); 
    }finally{ 
     if(writer!=null){ 
      writer.close(); 
     } 
     document.close(); 
     is.close(); 
    } 

} 

}

+0

JavaScriptについて? – luca

+0

あなたはhrefの完全なURLを直接提供する必要があります(javascriptを使用しないでください) – Hansraj

関連する問題