2017-01-26 13 views
0

私は次のような要件があります。私はユーザーAngularJS、JavaScript。 1.ユーザーがブラウザで文書をクリックします。私は文書のパスを取得し、それを開きます。 >> window.open(documentpath); 2.ただし、ディレクトリに保存されている文書のファイル名は、IdおよびNO拡張子に置き換えられます。 abc/files/4 3.実際のファイル名はId:4のファイル名になります。ファイル名:Hello.pdfブラウザで開くときにファイルの名前を変更する

ファイルを開くと、フォーマットがないabc/files/4が表示されますファイルを開けません。

ファイル名をabc/files/Hello.pdfとするにはどうしたらいいですか?

第1回、パスabc/files/4を使いたいと思います。ファイルをダウンロードしたくありません。 cache/Tempのようなローカルのどこかに保存してファイルの内容を取得し、4をHello.pdfに名前を変更してブラウザで開きます。これらはすべてバックグラウンドで実行する必要があり、ユーザーがファイルをクリックしたときにファイルを正しく開く必要があります。

JavaScript、AngularJSを使用することは可能ですか?教えてください

+0

あなたは、ファイルをダウンロードしますが、フォルダに保存したくありませんか?それはダウンロードしています。 – Lucero

答えて

1

JavaScriptは、セキュリティ上の理由から、通常、ローカルファイルシステムにアクセスできません。

あなたがしなければならないのは、HTTPレスポンスとともにファイル名を渡すことです。これを行うには、応答にこのヘッダーを追加します。

Content-Disposition: inline; filename="Hello.pdf" 

も参照してください:

0

これは、あなたが使用してファイルをダウンロードできるようになります非同期リクエストを作成し、base64でエンコードされたデータURLで開きます。それは名前を設定しないでください。表示をpdfにするだけです。サーバーへのアクセス権がなく、無限に優れたAaron Digullaメソッドを実装できない場合は、これを使用できます。

/** 
 
* 
 
* jquery.binarytransport.js 
 
* 
 
* @description. jQuery ajax transport for making binary data type requests. 
 
* @version 1.0 
 
* @author Henry Algus <[email protected]> 
 
* 
 
*/ 
 
$.ajaxTransport("+binary", function(options, originalOptions, jqXHR) { 
 
    // check for conditions and support for blob/arraybuffer response type 
 
    if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || (window.Blob && options.data instanceof Blob))))) { 
 
    return { 
 
     // create new XMLHttpRequest 
 
     send: function(headers, callback) { 
 
     // setup all variables 
 
     var xhr = new XMLHttpRequest(), 
 
      url = options.url, 
 
      type = options.type, 
 
      async = options.async || true, 
 
      // blob or arraybuffer. Default is blob 
 
      dataType = options.responseType || "blob", 
 
      data = options.data || null, 
 
      username = options.username || null, 
 
      password = options.password || null; 
 

 
     xhr.addEventListener('load', function() { 
 
      var data = {}; 
 
      data[options.dataType] = xhr.response; 
 
      // make callback and send data 
 
      callback(xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders()); 
 
     }); 
 

 
     xhr.open(type, url, async, username, password); 
 

 
     // setup custom headers 
 
     for (var i in headers) { 
 
      xhr.setRequestHeader(i, headers[i]); 
 
     } 
 

 
     xhr.responseType = dataType; 
 
     xhr.send(data); 
 
     }, 
 
     abort: function() {} 
 
    }; 
 
    } 
 
}); 
 

 
var blobToBase64 = function(blob, cb) { 
 
    var reader = new FileReader(); 
 
    reader.onload = function() { 
 
    var dataUrl = reader.result; 
 
    var base64 = dataUrl.split(',')[1]; 
 
    cb(base64); 
 
    }; 
 
    reader.readAsDataURL(blob); 
 
}; 
 

 
$.ajax("Description.pdf", { 
 
    dataType: "binary" 
 
}).done(function(data) { 
 
    blobToBase64(data, function(base64encoded) { 
 
    window.open("data:application/pdf;base64," + base64encoded); 
 
    }); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

私はpdfとしてファイル形式をデフォルトにしたくありません。私はDBから実際のファイル名とフォーマットを取得し、返された実際のファイルの名前を変更したいと思います。 –

関連する問題