CNode

怎么通过ajax下载文件,牵涉跨域

问答
Sshinygang发布于12 年前最后回复10 年前19 回复21983 浏览0 收藏

后端是node的,代码,前端web咋通过ajax跨域下载文件到本地呢?求详细讲解。

查看回复

回复 (19)

B
beilunyang#2·10 年前

楼主,解决了的话,麻烦回复一下,说一下解决方案。

A
AnzerWall#3·10 年前

如果是node那边的文件内容,视为下载不就行了,另外打开窗口。利用node的流和pipe完全可以生成动态内容的问题,本身http也可以设置下载保存的文件名

S
shinygang#5·10 年前
引用 akayzhang@shinygang 后来解决了么 我今天也遇到了

@akayzhang @beilunyang

服务端处理:

function returnOutput(req, res, output, callback) {
    res.setHeader('Access-Control-Allow-Origin', req.headers.origin);
    res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
    res.writeHead(200, {'Content-Type': 'application/json; charset=utf-8'});
    var data = JSON.stringify({"result": output});
    if (callback) {
        data = callback + "(" + data + ")";
    }
    res.write(data);
    res.end();
    QueueManager.removeObj(req.uniqueUrl);
    console.timeEnd(req.uniqueUrl);
}

/*下载商城折扣配置*/
app.post("/gm/downPropReduction",function(req,res){
    var path =  QSetting.current().pathName +'/prop_setting.js';
    console.log(path);
    fs.exists(path, function (exists) {
        if (!exists) {
            returnErrorMessage(req, res, "This request URL was not found on this server.");
        } else {
            fs.readFile(path,{"encoding":"utf-8"}, function (err, file) {
                if (err) {
                    returnErrorMessage(req, res, err);
                } else {
                    returnOutput(req, res, file);
                }
            });
        }
    });
});
5
514366607#6·12 年前

下载文件为什么需要用ajax?

T
think2011#7·12 年前
  1. 前端的话,直接响应链接就会触发下载了呗。
  2. 后端的话,没试过,估计也就跟爬虫爬图片一样,保存起来就可以了吧?
S
shinygang#8·12 年前
引用 514366607下载文件为什么需要用ajax?

@514366607 我的文件在另外的服务器,web端不用ajax请求怎么请求?

S
shinygang#9·12 年前
引用 think20111. 前端的话,直接响应链接就会触发下载了呗。 2. 后端的话,没试过,估计也就跟爬虫爬图片一样,保存起来就可以了吧?

@think2011 触发是没问题的,咋个获取到node那边响应回来的数据,我用ajax没有取到。

T
think2011#10·12 年前
引用 shinygang@think2011 触发是没问题的,咋个获取到node那边响应回来的数据,我用ajax没有取到。

@shinygang 你理解错了,前端没有那么大的权限。 如果这是在烧烤的话,前端能做的只是一个叉子的作用,客人(用户) 通过 叉子(前端)食物小车(后端) 上叉了内容,叉子并不能决定要什么食物,是由客人决定的。

Z
zhou-yg#11·12 年前

js不能读写文件本地文件的。不然的话,随便上个网,电脑里就全是病毒了

T
tulayang#12·12 年前

服务器端路由只要是二进制MIME,就下载了,不需要ajax,下载本身并不刷新页面

J
jinphen#13·12 年前

没明白需求,呵呵,如果非要使用ajax跨域取文件的话,可以试一下让对方服务器在HTTP报文头加上Access-Control-Allow-Origin。

J
jinphen#16·12 年前
引用 shinygang@jinphen 这个我用了,那边返回了内容,ajax这边没法生成文件

@shinygang 你要生成文件保存到电脑上么?

N
NexusLee#17·12 年前

ajax 本身也是通过URL请求的 你没URL怎么请求的?

S
shinygang#18·12 年前
引用 jinphen@shinygang 你要生成文件保存到电脑上么?

@jinphen 是的,我获取到文件内容了,不知道js咋个保存成文件,要兼容。

S
shinygang#19·12 年前
引用 NexusLeeajax 本身也是通过URL请求的 你没URL怎么请求的?

@NexusLee 我url是动态生成的,而且这个url不是文件路径,是要通过node服务器那边处理获取文件内容的。我现在的问题是内容获取到了,咋个通过js转换成我想要的文件,并且兼容性好。

参与回复
登录后即可参与回复。登录