我是Sharepoint
的新手。我有几个文件需要下载,我正在尝试使用CURL/Wget
或Java
来实现此目的。
我需要下载的文件在sharepoint
上显示为列表。我需要选择所有单个项目,然后点击Export to Excel
面板中的List
,将文件下载为Excel表格。是否可以下载这些文件?
我尝试使用URL进行CURL和Wget,但整个html内容正在下载。
我搜索了可用于连接到sharepoint的任何Java库,并且遇到了这个:https://code.google.com/archive/p/java-sharepoint-library/
我尝试使用上面的库运行此示例代码:
NtlmAuthenticator credentials = new NtlmAuthenticator("sharepoint2.xxxxxxx.com", "username", "password");
try {
SPSite instance = new SPSite(new URL("https://sharepoint2.xxxxxxx.com/sites/PIR/"), credentials, true);
List<SPWeb> result = instance.getAllWebs();
System.out.println(result);
if ((result != null) && (result.size() > 1)) {
SPWeb web = result.get(0);
// Lists
List<SPList> lists = web.getLists();
assertNotNull(lists);
if ((lists != null) && (lists.size() > 1)) {
// List items in list
SPList list = lists.get(0);
// List items in document library
list = lists.get(0);
List<SPListItem> items = list.getItems();
for (SPListItem item : items) {
File file = new File("c:\\" + item.getFile().getName());
item.getFile().saveBinary(file);
}
}
}
}catch(Exception e){
e.printStackTrace();
}
当我运行上面的代码时,它在List<SPWeb> result = instance.getAllWebs();
失败并出现此错误:
java.lang.NullPointerException
at org.korecky.sharepoint.WsContext.getWebsPort(WsContext.java:150)
at org.korecky.sharepoint.SPSite.getAllWebs(SPSite.java:116)
at access.main(access.java:20)
我不确定出了什么问题。我无法尝试下载文件的任何新方法。
我愿意尝试新方法而不是java。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:0)
尝试使用以下示例代码:
NtlmAuthenticator credentials = new NtlmAuthenticator("DOMAIN", "username", "password");
// Connect to Sharepoint
SPSite instance = new SPSite(new URL("https://www.server.com/"), credentials, null, true, SPVersion.SP2013);
// Get root web instance
SPWeb rootWeb = instance.getRootWeb();
从此处查看文档:{{3}}
对于Office 365,我们可以使用 Office 365 SDK for Java 。
答案 1 :(得分:0)
用于开发的信息-https://paulryan.com.au/2014/spo-remote-authentication-rest/ 那里的一切都描述得很好。
import java.io.*;
import java.net.*;
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.Document;
import org.xml.sax.*;
public class LoginManagerSharePoint {
private final String sts = "https://login.microsoftonline.com/extSTS.srf";
private final String loginContextPath = "/_forms/default.aspx?wa=wsignin1.0";
//private final String contextInfoPath = "/_api/contextinfo";
private final String sharepointContext = "xxxxxxx";
private final String reqXML = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
"<s:Envelope xmlns:s=\"http://www.w3.org/2003/05/soap-envelope\" " +
"xmlns:a=\"http://www.w3.org/2005/08/addressing\" " +
"xmlns:u=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\">" +
"<s:Header><a:Action s:mustUnderstand=\"1\">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue" +
"</a:Action><a:ReplyTo><a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>" +
"</a:ReplyTo><a:To s:mustUnderstand=\"1\">https://login.microsoftonline.com/extSTS.srf</a:To>" +
"<o:Security s:mustUnderstand=\"1\" " +
"xmlns:o=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">" +
"<o:UsernameToken><o:Username>[username]</o:Username><o:Password>[password]</o:Password>" +
"</o:UsernameToken></o:Security></s:Header><s:Body><t:RequestSecurityToken " +
"xmlns:t=\"http://schemas.xmlsoap.org/ws/2005/02/trust\">" +
"<wsp:AppliesTo xmlns:wsp=\"http://schemas.xmlsoap.org/ws/2004/09/policy\">" +
"<a:EndpointReference><a:Address>[endpoint]</a:Address></a:EndpointReference>" +
"</wsp:AppliesTo><t:KeyType>http://schemas.xmlsoap.org/ws/2005/05/identity/NoProofKey" +
"</t:KeyType><t:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue" +
"</t:RequestType><t:TokenType>urn:oasis:names:tc:SAML:1.0:assertion</t:TokenType>" +
"</t:RequestSecurityToken></s:Body></s:Envelope>";
private String generateSAML() {
String saml = reqXML
.replace("[username]", "username");
saml = saml.replace("[password]", "password");
saml = saml.replace("[endpoint]", String.format("https://%s.sharepoint.com/_forms/default.aspx?wa=wsignin1.0", sharepointContext));
return saml;
}
public String getCookie() {
String token;
try {
token = requestToken();
String cookie = submitToken(token);
//System.out.println(cookie);
return cookie;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
private String requestToken() throws XPathExpressionException, SAXException,
ParserConfigurationException, IOException {
String saml = generateSAML();
URL u = new URL(sts);
URLConnection uc = u.openConnection();
HttpURLConnection connection = (HttpURLConnection) uc;
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
// http://stackoverflow.com/questions/12294274/mobile-app-for-sharepoint/12295224#12295224
connection.addRequestProperty("Content-Type",
"text/xml; charset=utf-8");
OutputStream out = connection.getOutputStream();
Writer wout = new OutputStreamWriter(out);
wout.write(saml);
wout.flush();
wout.close();
InputStream in = connection.getInputStream();
int c;
StringBuilder sb = new StringBuilder("");
while ((c = in.read()) != -1)
sb.append((char) (c));
in.close();
String result = sb.toString();
String token = extractToken(result);
//System.out.println(token);
return token;
}
private String extractToken(String result) throws SAXException, IOException, ParserConfigurationException, XPathExpressionException {
//http://stackoverflow.com/questions/773012/getting-xml-node-text-value-with-java-dom
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(new InputSource(new StringReader(result)));
XPathFactory xpf = XPathFactory.newInstance();
XPath xp = xpf.newXPath();
String token = xp.evaluate("//BinarySecurityToken/text()", document.getDocumentElement());
//handle error S:Fault:
//http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/df862099-d9a1-40a4-b92e-a107af5d4ca2
//System.out.println(token);
return token;
}
private String submitToken(String token) throws IOException {
// http://cafeconleche.org/books/xmljava/chapters/ch03s05.html
String url = String.format("https://%s.sharepoint.com%s", sharepointContext, loginContextPath);
URL u = new URL(url);
URLConnection uc = u.openConnection();
HttpURLConnection connection = (HttpURLConnection) uc;
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.addRequestProperty("Accept", "application/x-www-form-urlencoded");
connection.addRequestProperty("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)");
// http://stackoverflow.com/questions/12294274/mobile-app-for-sharepoint/12295224#12295224
connection.addRequestProperty("Content-Type", "text/xml; charset=utf-8");
connection.setInstanceFollowRedirects(false);
OutputStream out = connection.getOutputStream();
Writer wout = new OutputStreamWriter(out);
wout.write(token);
wout.flush();
wout.close();
InputStream in = connection.getInputStream();
//http://www.exampledepot.com/egs/java.net/GetHeaders.html
String setCookieRtFa = null;
String setCookieFedAuth = null;
for (int i=0; ; i++) {
String headerName = connection.getHeaderFieldKey(i);
String headerValue = connection.getHeaderField(i);
//System.out.println("header: " + headerName + " : " + headerValue);
if (headerName == null && headerValue == null) {
// No more headers
break;
}
if (headerName == null) {
// The header value contains the server's HTTP version
}
if (headerName != null) {
if (headerName.equals("Set-Cookie")) {
if (setCookieRtFa == null) {
setCookieRtFa = headerValue;
} else {
int t = 0;
if (headerValue.equals("RpsContextCookie=; path=/")) t = 1;
if (t == 0) {
setCookieFedAuth = headerValue;
}
}
}
}
}
String cookieContainer = setCookieRtFa.split("\\;")[0] + ";" + setCookieFedAuth.split("\\;")[0];
in.close();
return cookieContainer;
}
}
LoginManagerSharePoint loginManagerSharePoint = new
LoginManagerSharePoint();
String cookieContainer = loginManagerSharePoint.getCookie();
HttpClient httpClient = HttpClientBuilder.create().build();
HttpGet httpGet = new HttpGet(URL_FILE);
httpGet.addHeader("Cookie", cookieContainer);
httpGet.addHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)");
HttpResponse response = httpClient.execute(httpGet);
InputStream inputStream = response.getEntity().getContent();