Mar*_*ven 2 java jax-rs same-origin-policy mime-types
让我先提供一些背景信息.我正在开发一个与Microsoft SharePoint 2010集成的系统,不是真正的SharePoint作为系统,而是它的文件系统,文档库等的虚拟表示...用户将文件上载到SharePoint,我的系统监视这些文件并对它们编制索引进入搜索引擎(包括文件内容).用户可以通过REST接口与该系统进行交互.
我创建了一个REST接口来为用户提取一个文件,该文件对应于我的搜索引擎中的某个条目.这使用绝对网络路径作为其标识符.一个例子是//corporateserver//library1/filex.docx
.由于原始策略相同,但我无法加载此文件客户端.因此,我试图通过服务器传输它.
我使用JAX-RS传输数据取得了一些成功,但是,我遇到了以下困难:
用户希望下载的文件可以是多种内容类型,其中大多数是微软办公室格式.我查看了已注册的MIME类型列表,并且遇到了application/msword
或者application/vnd.ms-powerpoint
我的问题:是否有包含Microsoft Office文件的内容类型?如果没有,那么如何继续将正确的内容类型与正在请求的文件进行匹配.如果要为内容类型的word文件服务,会发生什么text/plain
?
任何有关该主题的帮助将不胜感激.
编辑
我用来传输数据的代码:
package com.fujitsu.consensus.rest;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
import org.apache.commons.io.IOUtils;
import org.codehaus.jettison.json.JSONException;
@Path("/fetcher")
public class FetcherService {
@GET
@Path("/fetch")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response fetchFile(@QueryParam("path") String path)
throws JSONException, IOException {
final File file = new File(path);
System.out.println(path);
StreamingOutput stream = new StreamingOutput() {
@Override
public void write(OutputStream output) throws IOException {
try {
output.write(IOUtils.toByteArray(new FileInputStream(file)));
} catch (Exception e) {
e.printStackTrace();
}
}
};
return Response.ok(stream, MediaType.APPLICATION_OCTET_STREAM)
.header("Content-Disposition", "inline; filename=\"" + file.getName() + "\"")
.build();
}
}
Run Code Online (Sandbox Code Playgroud)
JavaScript代码:
$.ajax({
url: "../rest/fetcher/fetch",
type: "GET", //send it through get method
data:{path:obj.id},
success: function(response) {
console.log(response);},
error: function(xhr) {//Do Something to handle error}
});
Run Code Online (Sandbox Code Playgroud)
我在客户端得到的回复:
编辑2
我添加了HTTP跟踪作为标题和数据实际上正在传输的证据,但是下载对话框没有显示.
所述Content-Disposition
标头不出现与内联或附件中工作.
您可以使用application/octet-stream
内容类型并执行以下操作来下载文件:
@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response downloadFile(String fileName) {
File file = ... // Find your file
return Response.ok(file, MediaType.APPLICATION_OCTET_STREAM)
.header("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"")
.build();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6305 次 |
最近记录: |