Как получить доступ к файлу .xlsx, хранящемуся на Sharepoint (с аутентификацией) для Apache POI? - PullRequest
0 голосов
/ 30 октября 2019
  1. У меня есть файл .xlsx, хранящийся на sharepoint, который требует входа в систему для получения / просмотра файла excel.
  2. Мне нужен этот файл для выполнения некоторых операций над ApachePOI
  3. Как загрузить этот файл?

Я пытался сделать это через InputStream, но я не знаю, как выполнить аутентификацию, и я получаю ошибку 403, которая очевидна, поскольку я не предоставляюпароль / логин (не знаю как)

InputStream inputStream = new URL("https://example.sharepoint.com/something/something1/file.xlsx").openStream();
Files.copy(inputStream, Paths.get("C:/file.xlsx"));

Есть ли простой способ доступа к этому файлу?

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Я бы попробовал java.net.HttpURLConnection вместе с java.net.Authenticator и java.net.PasswordAuthentication.

Пример:

import org.apache.poi.ss.usermodel.*;

import java.io.InputStream;
import java.net.URL;
import java.net.HttpURLConnection;
import java.net.Authenticator;
import java.net.PasswordAuthentication;

class ReadExcelFromURL {

 public static void main(String[] args) throws Exception {

  Authenticator.setDefault (new Authenticator() {
   private String username = "Domain\\UserName";
   private String password = "password";
   protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication (username, password.toCharArray());
   }
  });

  String stringURL = "https://example.sharepoint.com/something/something1/file.xlsx";

  URL url = new URL(stringURL);
  HttpURLConnection con = (HttpURLConnection)url.openConnection();

  InputStream in = con.getInputStream();
  Workbook workbook = WorkbookFactory.create(in);

  for (Sheet sheet : workbook) {
   System.out.println(sheet); // success?
  }

  workbook.close();
 }
}
0 голосов
/ 30 октября 2019

Использование этой зависимости maven:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.4.1</version> </dependency>

import org.apache.http.client.CredentialsProvider;
import org.apache.http.auth.AuthScope;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.auth.NTCredentials;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.util.EntityUtils;

public class SharePointClientAuthentication {

public static void main(String[] args) throws Exception {
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(
            new AuthScope(AuthScope.ANY),
            new NTCredentials("username", "password", "https://hostname", "domain"));
    CloseableHttpClient httpclient = HttpClients.custom()
            .setDefaultCredentialsProvider(credsProvider)
            .build();
    try {
        HttpGet httpget = new HttpGet("http://hostname/_api/web/lists");

        System.out.println("Executing request " + httpget.getRequestLine());
        CloseableHttpResponse response = httpclient.execute(httpget);
        try {
            System.out.println("----------------------------------------");
            System.out.println(response.getStatusLine());
            EntityUtils.consume(response.getEntity());
        } finally {
            response.close();
        }
    } finally {
        httpclient.close();
    }
...