- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用路径从露天下载文档,但我的内容长度为空,并且可以在浏览器中下载图像,但没有显示任何内容。谁能指出我做错了什么。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.chemistry.opencmis.client.api.CmisObject;
import org.apache.chemistry.opencmis.client.api.Document;
import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.client.api.SessionFactory;
import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.SessionParameter;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.enums.BindingType;
public class TestServlet extends HttpServlet {
private static final String ALFRSCO_ATOMPUB_URL = "http://localhost:8484/alfresco/cmisatom";
private static final String REPOSITORY_ID = "cf9aacff-a023-477f-a7e1-a8a901cf0b27";
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet TestServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet TestServlet at " + request.getContextPath() + "</h1>");
out.println("</body>");
out.println("</html>");
Map<String, String> parameter = new HashMap<String, String>();
// Set the user credentials
parameter.put(SessionParameter.USER, "admin");
parameter.put(SessionParameter.PASSWORD, "admin");
// Specify the connection settings
parameter.put(SessionParameter.ATOMPUB_URL, ALFRSCO_ATOMPUB_URL);
parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
//Add repository Id
parameter.put(SessionParameter.REPOSITORY_ID, REPOSITORY_ID);
// Create a session
SessionFactory factory = SessionFactoryImpl.newInstance();
Session session = factory.getRepositories(parameter).get(0).createSession();
System.out.println("Connected to repository:" + session.getRepositoryInfo().getName());
Folder root = session.getRootFolder();
System.out.println("Repository Name: "+root.getName()+"id: "+session.getRepositoryInfo().getId());
// (minimal set: name and object type id)
String path1 = "/Hello/img.jpg";
Document doc = (Document) session.getObjectByPath(path1);
System.out.println(doc.getId()+" docname: "+doc.getName());// docId=workspace://SpacesStore/669bd07f-7a3d-471c-b6f3-bff6764f827e
// String fullPath= "/Hello" + "/imgss.png";
Document doc1 = (Document)session.getObject(doc.getId());
// CmisObject obj=doc1;
Document newDocument = (Document) session.getObjectByPath(path1);
System.out.println(newDocument.getId());
//File file = new File(home+"/Downloads/" + fileName + ".txt");
response.setContentType("application/force-download");
//response.setContentLength(-1);
response.setContentType("application/octet-stream");
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Content-Disposition","attachment; filename=img.jpg");//fileName);
try {
ContentStream cs = doc1.getContentStream(null);
System.out.println("buffered content: "+cs);
BufferedInputStream in =new BufferedInputStream(cs.getStream());
// FileOutputStream fos = new FileOutputStream(home);
// OutputStream bufferedOutputStream = new BufferedOutputStream(fos);
System.out.println("buffered outputstream: "+in);
DataInputStream din = new DataInputStream(in);
while(din.available() > 0){
out.print(din.readLine());
out.print("\n");
}
din.close();
in.close();
}
catch (IOException e)
{
throw new RuntimeException(e.getLocalizedMessage());
}
}
}
}
我在控制台中得到的输出:
Connected to repository:Main Repository
Repository Name: Company Homeid: 4cdc8cd1-ddf1-4e30-95f8-4a2219073580
workspace://SpacesStore/2284cd59-8480-40fa-baed-05d54ddfc561;1.0 docname: imgss.png
workspace://SpacesStore/2284cd59-8480-40fa-baed-05d54ddfc561;1.0
buffered content: ContentStream [filename=imgss.png, length=null, MIME type=image/png, has stream=true][extensions=null]
buffered outputstream: java.io.BufferedInputStream@173b5e2
露天图片:
我下载的图片是:
最佳答案
在露天,您可以使用以下方式下载文档
在我的解决方案中,您将使用
serverUrl : "http://127.0.0.1:8080/alfresco/api/-default-/public/cmis/versions/1.0/atom";
username : admin
password : admin
第一种方法:使用文档 ID
文档的ID是我们在Alfresco上传时Alfresco为该文档固定的ID
public static void downloadDocumentByID(String serverUrl, String username, String password ,String documentID,String fileName,String destinationFolder){
String fullPath= destinationFolder + fileName;
Document newDocument = (Document) getSession(serverUrl, username, password).getObject(documentID);
System.out.println(newDocument.getId());
try {
ContentStream cs = newDocument.getContentStream(null);
BufferedInputStream in =new BufferedInputStream(cs.getStream());
FileOutputStream fos = new FileOutputStream(fullPath);
OutputStream bufferedOutputStream = new BufferedOutputStream(fos);
byte[] buf = new byte[1024];
int n=0;
while ((n=in.read(buf))>0)
{
bufferedOutputStream.write(buf,0,n);
}
bufferedOutputStream.close();
fos.close();
in.close();
}
catch (IOException e)
{
throw new RuntimeException(e.getLocalizedMessage());
}
}
第二种方式:使用文档路径
在这个解决方案中,您必须获取文档的路径,有时很难获取它,这是我总是使用第一个的方式
public static void downloadDocumentByPath(String serverUrl, String username, String password ,String path,String destinationFolder){
String fileExtention = path.substring(path.lastIndexOf(".")+1,path.length());
String folderPath=path.substring(0,path.lastIndexOf("/"));
String fileName=path.substring(path.lastIndexOf("/")+1,path.length());
Folder parentFolder = getFolderByPath(serverUrl, username, password,folderPath);
Document newDocument = getChild(serverUrl, username, password , parentFolder ,fileName);
String fullPath = destinationFolder+fileName;
try {
ContentStream cs = newDocument.getContentStream(null);
BufferedInputStream in =new BufferedInputStream(cs.getStream());
FileOutputStream fos = new FileOutputStream(destinationFolder);
System.out.println("****-**"+destinationFolder+":::");
OutputStream bufferedOutputStream = new BufferedOutputStream(fos);
byte[] buf = new byte[1024];
int n=0;
while ((n=in.read(buf))>0)
{
bufferedOutputStream.write(buf,0,n);
}
bufferedOutputStream.close();
fos.close();
in.close();
}
catch (IOException e)
{
throw new RuntimeException(e.getLocalizedMessage());
}
}
您可以在此处了解更多信息Download user selected file/upload a file to a user selected directory both with primefaces
此外,您可以使用 contentStram ,它看起来像这样
public InputStream downloadDocument(String serverURL, String nomUtilisateur, String passwordUtilisateur, String path, String nomFile) {
Document newDocument = (Document) getSession(serverURL, nomUtilisateur, passwordUtilisateur).getObject(path);
ContentStream cs = newDocument.getContentStream(null);
return cs.getStream();
}
然后简单地调用这个方法
public void downloaddoc(Document doc) throws FileNotFoundException, TransformerConfigurationException, TransformerException {
InputStream input = downloaddoc(serverUrl, username, password, doc.getPath(), doc.getNameFile);
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
setDownload(new DefaultStreamedContent(input, externalContext.getMimeType(doc.getNomRepertoire()), doc.getNomRepertoire()));
}
希望对您有帮助。
关于java - 使用 opencmis 从 alfresco 下载文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41418224/
我有一个 .sln 文件,里面有几个项目。为了简单起见,让我们称它们为... 项目A 项目B 项目C ...其中 A 是引用 B 和 C 的主要项目。我的目标是更新我的构建脚本,为 ProjectA
我安装了 Magento,我想知道如何生成完整的 API 文档,例如 http://docs.magentocommerce.com/ 上的文档是使用 phpdoc 生成的。 Magento 中是否包
我通常使用jetbrains family ide。在为函数创建文档时非常有用,只需输入 /** 如何在创建文档时创建自定义标签,例如@date标签。 最佳答案 JavaScript、Java: st
我正在尝试使用 jOpenDocument library创建文档。我已经执行了创建电子表格的示例 - 代码编译并运行正常,但当我尝试使用 Excel Office 2012 或 Google Doc
如标题。 有没有介绍HTML DOM构造的图片? 最佳答案 DOM(文档 对象模型)从文档 节点开始。它被称为“根节点”。 观察下面的树(括号中对应的nodeType): [HTMLDocument]
我喜欢 ColdFusion Builder。但我不喜欢帮助只有 CF9 文档。有什么方法可以将其更改为拥有 ColdFusion 8 文档? 最佳答案 http://livedocs.adobe.c
这个问题在这里已经有了答案: What is the consequence of this bit of javascript? (4 个答案) 关闭 9 年前。 我看到一些 jQuery 脚本嵌
我有一个 XML 文件,其中包含需要在 Word 文档中填充的数据。 我需要找到一种方法来定义一个模板,该模板可用作从 XML 文件填充数据并创建输出文档的基线。 我相信有两种方法可以做到这一点。 创
我正在尝试查找有关如何使用 AVAudioEngine 的详细文档。有谁知道我在哪里可以找到它? 我找到了这个,但与文档丰富的 UI 内容相比,它似乎非常简陋。 https://developer.a
我对 Tensorflow 文档越来越感到恼火和沮丧。我在谷歌上搜索了有关 的文档 tf.reshape 我被定向到一个通用页面,例如 here 。我想查看 tf.reshape 的详细信息,而不是整
我正在学习本教程:http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer 然后遇到了这个片段: u
如何在 swagger 中为对象数组编写文档。这是我的代码,但我不知道如何访问对象数组中的数据。 { "first_name":"Sam", "last_name":"Smith",
是否有针对 Javascript 的 JavaDocs 之类的东西?当我在 netbeans IDE 中按 ctrl+space 时 写javascript,指定对象的javascript文档就出来了
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我需要 JavaScript 中的 heredoc 之类的东西。你对此有什么想法吗?我需要跨浏览器功能。 我发现了这个: heredoc = '\ \ \ zzz\ \
WSDL 文档是包含一系列的,可描述某个 web service 的定义的,简单的 XML 文档 WSDL 文档结构 WSDL 文档用下表这些主要的元素来描述某个 web service 的
是否有 ocropus 的文档? 我正在寻找对以下功能的解释: make_SegmentPageByRAST(): segment() RegionExtractor(): setPageLines(
这个问题在这里已经有了答案: Understanding events and event handlers in C# (13 个回答) 4年前关闭。 我正在使用 NRECO 和 ffmpeg 对视
我正在尝试访问工作服务器以与名为 Spotfire 的应用程序一起使用。我的同事把这个传给我,现在已经休息了几个星期,我对他的建议有意见。 实际上,当我通过 localhost 运行我的 Web 应用
Elm 文档没有给出示例用法,因此很难理解类型规范的含义。在几个地方,我看到“a”用作参数标识符,例如 Platform.Cmd : map : (a -> msg) -> Cmd a -> Cmd
我是一名优秀的程序员,十分优秀!