【问题标题】:Download file for local path with AngularJs使用 AngularJs 下载本地路径文件
【发布时间】:2017-09-29 07:30:19
【问题描述】:

我正在尝试下载位于我的本地计算机中的具有特定路径的文件。

我做了以下代码,下载了 html5 方法和 ng-href:

<file-download fileurl="{{ Pathfile }}" linktext="Click to download"></file-download>

myApp.directive('fileDownload', function(){
      return {
        restrict: 'E', 
        scope: {
          fileurl: '@fileurl',
          linktext: '@linktext'      
        },
        template: '<a href="{{ fileurl }}" download>{{ linktext }}</a>',
        link: function(scope, elem, attrs) {          
        }               
      }
    });

我尝试使用以下配置,但我在 url 中添加了相同的不安全

myApp.config( [
    '$compileProvider',
    function( $compileProvider )
    {   

        $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|fil‌​e|blob|ftp|mailto|ch‌​rome-extension):/);
    }
]);

我的下载网址总是不安全。如何解决?

【问题讨论】:

  • 您无法访问除服务器提供的任何文件
  • 如果我认为我的本地机器是服务器,也许还有另一种方法?

标签: angularjs


【解决方案1】:

这是我找到的最佳解决方案,感谢 Link1Link2 文件.html

<a ui-sref="state"   ng-click="downloadDoc(doc)" ></a>

Controller.js

$scope.downloadDoc = function(doc){         

  var a = document.createElement("a");
  document.body.appendChild(a);
  var fileExt = doc.nomeFile.substring(doc.nomeFile.lastIndexOf('.')+1, doc.nomeFile.length) || doc.nomeFile; 
  var fileType = AllegatiService.GenerateFileType(fileExt);              
  AllegatiService.getFile(doc).success(function(data){

        var file = new Blob([data], {type:fileType});
        var fileURL = window.URL.createObjectURL(file);
        a.href = fileURL;
        a.download = doc.nomeFile;
        a.click();


    });
} 

service.js

var getFile = function(doc){

   return  $http({
        method: 'POST', url:'download/getFile',responseType: 'arraybuffer',
        data: doc
    });  

}

控制器java

@RequestMapping(value = "/getFile", method = RequestMethod.POST)

    public ResponseEntity<byte[]> getPdf(@RequestBody DocDto docDto ) throws IOException{
        String fileType = getFileType(docDto.getNameFile());
        File file = docDto.getFile();
        String filename =docDto.getNameFile();


        FileInputStream fileStream;
        try {
            fileStream = new FileInputStream(file);
            byte[] contents = IOUtils.toByteArray(fileStream);
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.parseMediaType(fileType));           
            headers.setContentDispositionFormData(filename, filename);
            ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(contents, headers, HttpStatus.OK);
            return response;
        } catch (FileNotFoundException e) {
           System.err.println(e);
        } catch (IOException e) {
            System.err.println(e);
        }
        return null;

    }

    public String getFileType(String nameFile) {
        String  fileExt = nameFile.substring(nameFile.lastIndexOf('.')+1, nameFile.length());
        String FileType ="";
        switch (fileExt.toLowerCase()) {  
        case "doc":  
        case "docx":  
            FileType = "application/msword";  
            break;  
        case "xls":  
        case "xlsx":  
            FileType = "application/vnd.ms-excel";  
            break;  
        case "pps":  
        case "ppt":  
            FileType = "application/vnd.ms-powerpoint";  
            break;  
        case "txt":  
            FileType = "text/plain";  
            break;  
        case "rtf":  
            FileType = "application/rtf";  
            break;  
        case "pdf":  
            FileType = "application/pdf";  
            break;  
        case "msg":  
        case "eml":  
            FileType = "application/vnd.ms-outlook";  
            break;  
        case "gif":  
        case "bmp":  
        case "png":  
        case "jpg":  
            FileType = "image/JPEG";  
            break;  
        case "dwg":  
            FileType = "application/acad";  
            break;  
        case "zip":  
            FileType = "application/x-zip-compressed";  
            break;  
        case "rar":  
            FileType = "application/x-rar-compressed";  
            break;  
    }  
        return FileType;
    }

【讨论】:

    猜你喜欢
    • 2018-02-23
    • 2017-11-16
    • 2015-06-23
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    相关资源
    最近更新 更多