如何在jquery中设置文件的名称

时间:2013-04-17 15:01:26

标签: javascript jquery download client-side

(这个标题可能不太清楚,但你在这里读到的是一个试图超越“质量标准”脚本的改进,根据选择的标签似乎更加严格)

在客户端是否有任何方法在jquery中设置下载文件的名称?

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

当用户点击链接时,默认情况下会尝试下载存储在服务器QXYZO123上的文件名,但是我想要它而不是说information.xls,如何设置它来建议文件名保存为?

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

1 个答案:

答案 0 :(得分:0)

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

但是有一些间接的方法可以做到这一点。首先,唯一的方法是在服务器端设置文件名。这取决于您在服务器端使用的语言。 Depens服务器端语言,你可以编写自己的下载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运行此服务器代码时,您可以从localhost:9080?fileName=yourCustomizedFileName的网址获取带有自定义文件名的文件。如您所见,我们正在提供fileName' GET' url中的请求参数。您可以使用javascript windows.location或其他内容在客户端Javascript代码上获取带有自定义文件名的文件。 不要让node.js代码让你感到困惑。解决方案的重点是编写一个下载api,它从' GET'中获取fileName参数。请求,将具有此名称的文件发送给客户。

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