在浏览器中打开时重命名文件

时间:2017-01-26 09:25:39

标签: javascript file

我有以下要求。我使用AngularJS,JavaScript。 1.用户在浏览器中单击文档。我得到文档路径并打开它。 >> window.open(documentpath); 2.但是保存在目录中的文档将文件名替换为Id和NO扩展名。 ABC /文件/ 4 3.实际文件名在数据库中为Id:4文件名:Hello.pdf

因此,当我打开文件时,我得到abc / files / 4,其中没有格式,并且它不会打开文件。

如何使用正确名称abc / files / Hello.pdf打开文件?

1,我想走路径abc / files / 4,我不想下载文件。只需将其存储在本地某处(如cache / Temp)以获取文件内容并将4重命名为Hello.pdf,然后在浏览器中将其打开。所有这些都应该在后台进行,并且应该在用户点击它时正确打开文件。

是否可以使用JavaScript,AngularJS?请让我知道

2 个答案:

答案 0 :(得分:1)

出于安全原因,JavaScript通常无法访问本地文件系统。

您需要做的是将文件名与HTTP响应一起传递。为此,请将此标头添加到响应中:

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

另见:

答案 1 :(得分:0)

这将允许您使用异步请求下载文件并在base64编码的数据URL中打开它。它WONT设置名称,只需将显示强制为pdf。如果您无法访问服务器并且无法实现无限更好的Aaron Digulla方法,则可以使用此方法。



/**
 *
 * jquery.binarytransport.js
 *
 * @description. jQuery ajax transport for making binary data type requests.
 * @version 1.0
 * @author Henry Algus <henryalgus@gmail.com>
 *
 */
$.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);
  });
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;