0
我想從露天使用路徑下載文檔,但我得到的內容長度爲空,圖像可以在瀏覽器中下載,但沒有任何顯示。任何人都可以指出我做錯了什麼。使用opencmis從露天下載文檔
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: [email protected]
圖片在露天:
圖片我已經下載是:
我已經在我的這個問題中嘗試過你的代碼,但它沒有獲取ContentStream中的文檔內容cs = newDocument.getContentStream(null); 。我在我現在的帖子中提出這個問題。我沒有收到任何文件。 – nagi
我正在獲取文檔doc1 =(Document)session.getObject(doc.getId()); OR Document newDocument =(Document)session.getObjectByPath(path1);從露天,但是當我得到ContentStream使用ContentStream cs = newDocument.getContentStream(null);我什麼都沒有或換句話說數據長度爲空。或者還有其他問題,我沒有得到我的文檔下載? – nagi
你看到我的編輯了嗎? –