【问题标题】:Can I retrieve a file from server with GET in rest我可以使用 GET 从服务器检索文件吗
【发布时间】:2014-08-24 13:03:32
【问题描述】:

我可以用我的 get 请求返回一个文件吗?我想通过 REST GET 方法返回一个 word 文档来调用 angularJS 服务。不确定是否有可能。

【问题讨论】:

  • 当然,有可能,但您需要发布您为我们处理的内容。
  • 对不起,马特。见我的最后一行。我什至不知道这可以做到。据我了解,我只能返回字符串(json/xml)表示形式。那么可能是二进制格式?我所要求的只是概念上的帮助,而不是代码。
  • 这是一个 Java 答案stackoverflow.com/questions/3496209/…

标签: rest coldfusion


【解决方案1】:

你对细节有点轻率,所以我会在回答时有点轻率。

REST 请求只是……一个请求。 REST 方面更多的是定义 URL 的方式,而不是请求过程本身实际发生的事情,这仍然是普通的 HTTP。

因此,与任何 GET 请求一样,如果要返回二进制数据,请适当设置标头 (<cfheader>),然后返回文件 (<cfcontent>)。

【讨论】:

  • 当马特要求一些代码时,我根本不知道这是否可以完成。然后马特说这是可能的,我开始像一只无头鸡:) 我正在阅读你的帖子,虽然没有任何直接关系 (cfmlblog.adamcameron.me/2014/04/…),但我想如果我设置标题和响应标题的内容会怎样。至少我必须向您展示一些东西,即使错了:) 关于细节,这就是我所拥有的,我有文件的完整物理路径,需要将文件返回给客户端。
  • 试一试:如果你弄错了,你的电脑不会爆炸 ;-)。恐怕我手头没有任何示例代码,所以我不得不把它拼凑起来给你看。然后停下来想……也许你应该这样做;-)
【解决方案2】:

所以我就是这样做的,幸运的是我得到了这个: http://smithcustomdev.com/2010/10/20/download-file-to-browser-using-cfscript/ 我所要做的就是使方法远程并监听 REST 服务

<cfscript>
    private void function serveFile(string filePath){
        var fileContent = fileRead(expandPath(filePath));   

        var context = getPageContext();
        context.setFlushOutput(false); 

        var response = context.getResponse().getResponse();
        response.reset();
        response.setContentType("text/csv");   
        response.setContentLength(len(fileContent));       
        response.setHeader("Content-Disposition","attachment; filename=#listLast(filePath,'\')#");

        var out = response.getOutputStream();     
        out.write(ToBinary(ToBase64(fileContent)));       
        out.flush();       
        out.close();
    }
</cfscript>

【讨论】:

  • csv 的内容类型不理想或不正确,因为您没有返回 csv 文件。
  • @Busches,不仅仅是概念上的代码(我发现它工作得很好)。我稍微改变了这个功能,让我可以发回 MS-word 文件。我还根据我的要求更改了功能,接受一个 id,从数据库中获取文件名并进行处理。该博客条目还有助于让您动态确定 MIME 类型。
  • 链接已失效 - wayback machine 中的链接万岁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-11
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 2018-03-29
  • 2012-10-14
  • 1970-01-01
相关资源
最近更新 更多