0

(这个标题可能不清楚,但无论你在这里读到什么,都是试图通过“质量标准”脚本的改进,根据所选择的标签,这似乎要严格得多)

在客户端,jquery 中有什么方法可以设置下载文件的名称吗?

假设在我的服务器上文件存储为QXYZO123,但该文件实际上是 information.xls ,一个电子表格。甚至超链接也显示 information.xls,因为我有将随机文件名链接到原始文件名的信息。

当用户点击链接时,默认情况下它会尝试下载存储在服务器上的文件名 QXYZO123,但我希望它改为 information.xls ,我该如何设置它以建议文件名另存为?

我称之为建议,因为根据用户的浏览器设置,它会自动下载我的文件名建议或询问用户在哪里下载并保存它,文件名建议

4

1 回答 1

0

JQuery 没有直接设置文件属性。JQuery 表示一些 Javascript 代码,而 Javascript 是一种客户端脚本语言。这意味着你可以做一些事情,只能在客户端,不能在服务器端。

但是有一些间接的方法可以做到这一点。首先,唯一的方法是在服务器端设置文件名。这取决于您在服务器端使用的语言。取决于服务器端语言,您可以编写自己的下载 web api。将文件名作为请求参数传递给您的 api,并让它为您提供具有自定义文件名的文件。我不知道您在服务器端使用什么语言,但我用 node.js 准备了一个服务器端代码,它接受“GET”请求中的自定义文件名作为参数。

var sys = require ('sys'),
url = require('url'),
http = require('http'),
qs = require('querystring');
var path = require('path');
var mime = require('mime');
var fs = require('fs');

var server=http.createServer(

function (request, response) {

      if(request.method=='GET') {
        var filePath='path_to_your_file_in_your_server_file_system';
        var filestream = fs.createReadStream(filePath);
        var url_parts = url.parse(request.url,true);
        console.log(url_parts);
        var fileName= url_parts.query.fileName; //Taking your customized file name from GET request parameters.
        if(!fileName)
        {
            fileName=path.basename(filePath);
        }

        var mimetype = mime.lookup(filePath);
        response.setHeader('Content-disposition', 'attachment; filename=' + fileName);
        response.setHeader('Content-type', mimetype);
        filestream.pipe(response);


        response.writeHead( 200 );

        response.end();
    }               
}
);

server.listen( 9080 );

当您使用 node.js 运行此服务器代码时,您可以从 url 获取具有自定义文件名的文件 localhost:9080?fileName=yourCustomizedFileName。如您所见,我们在 url 中提供了 fileName 'GET' 请求参数。您可以使用 javascript windows.location 或其他方式在客户端 Javascript 代码上使用自定义文件名获取文件。不要让 node.js 代码让您感到困惑。解决方案的重点是编写一个下载 api,该 api 从 'GET' 请求中获取 fileName 参数,以将具有此名称的文件发送给客户端。

您可以将此 node.js 代码应用于您的服务器端语言或研究如何应用它。可能,它不会很难找到和应用它。

于 2013-04-17T17:36:01.583 回答