Flask 정적 파일 다운로드 방법

2021. 8. 5. 11:17IT/python

SMALL

 

frontend : angularjs
backend : flask

 

 <button type="button" ng-click="event.close()" class="btn me-auto" id="close" data-bs-dismiss="modal">Close</button>
            <a href="{{pdf_path}}" download="{{pdf_path}}">
            <button type="button" ng-click="event.download()" class="btn btn-primary cornflower" id="download" data-bs-dismiss=" modal">Download</button> </a>

Download 버튼을 누르면 정적 파일(서버에 있는 PDF 파일) 등을 다운로드 할 수 있는 방법을 알려드리겠습니다

이러한 modal 창이 있다고 하면 header 정보를 통해 python 에서 다운받고자 하는 PDF 파일 경로를 얻어오는 코드를 짜야 합니다.

def fileSearch(title, files):
  for file in files:
    if title in file:
      return file
    else:
      print('없습니다.')
      
files = glob.glob(fpath + '*_infor2.csv')

if 'title' in query:
   file = fileSearch(query['title'] + '_infor2.csv', files)

이런 식으로 file 변수에 pdf 파일 경로를 보내서 

프론트엔드에서(angularjs) 

<< API.apps.view~ 이 코드는 파이썬과 angularjs를 연결하는 것인데 이건 무시하셔도 됩니다. >>

$scope.pdf_path = res.data.pdf_path 를 통해 파이썬에서 원하는 PDF 파일 경로를 받고

html의 href 값에 {{pdf_path}} 변수값에 넣어 주면 됩니다

  $scope.event.download = function() {
    $scope.header = $('body > div > footer > div > div.modal-header > h5');
    $scope.header = $scope.header.text();
    API.apps.view.functions('download', {page: $scope.page, header: $scope.header}, function(res){
      $scope.pdf_path = res.data.pdf_path;
      console.log('pdf file ', res.data.pdf_path);
      if (res.code != 200) {
        toastr.warning('다운로드를 할 수 없습니다.');
      }
      });   
  }

 

이때 ! 그냥 받으면 분명 오류가 뜰 것입니다 backend 코드를 바꿔주어야 합니다

@app.route('/resources/<path:path>')
def resources(path):
    resource_path = os.path.join(WEB_RESOURCE, path)
    print(resource_path)
    return flask.send_file(resource_path)

 

flask 는 send_file 함수를 이용해서 정적 파일을 전송할 수 있는데 이때 path를 잘 확인하고 이것을 잘 수정하여 기능을 구현해 보시기 바랍니다

LIST