日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

webDav之jackrabbit-webdav基础操作

發布時間:2023/12/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 webDav之jackrabbit-webdav基础操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用 jackrabbit-webdav 實現對附件的上傳下載操作

依賴的包

<dependency><groupId>org.apache.jackrabbit</groupId><artifactId>jackrabbit-webdav</artifactId><version>2.21.1</version> </dependency>

使用的相關類

import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPut; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.entity.InputStreamEntity; import org.apache.http.util.EntityUtils; import org.apache.jackrabbit.webdav.DavConstants; import org.apache.jackrabbit.webdav.DavServletResponse; import org.apache.jackrabbit.webdav.client.methods.HttpMkcol; import org.apache.jackrabbit.webdav.client.methods.HttpPropfind;

具體操作

連接 webDav 服務
  • 初始化 HttpClient 對象

    public static HttpClient initHttpClient() {PoolingHttpClientConnectionManager pcm = new PoolingHttpClientConnectionManager();//設置最大連接數pcm.setMaxTotal(100);pcm.setDefaultMaxPerRoute(80);// 通過連接池獲取 httpClient 對象return HttpClients.custom().setConnectionManager(pcm).build(); }
  • 初始化 HttpClientContext 對象

    public static HttpClientContext initContext() {WebDavConfig config = WebDavConfig.getInstance();URI uri = null;try {uri = new URI(config.getBaseUrl());} catch (URISyntaxException e) {logger.error("", e);throw new WebDavException();}// uri 轉換成 HttpHost 對象HttpHost target = new HttpHost(uri.getHost(), uri.getPort());// 用戶名/密碼認證CredentialsProvider credentialsProvider = new BasicCredentialsProvider();UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(config.getUserName(), config.getPassword());credentialsProvider.setCredentials(new AuthScope(target.getHostName(), target.getPort()), credentials);AuthCache authCache = new BasicAuthCache();// Generate BASIC scheme object and add it to the local auth cacheBasicScheme basicScheme = new BasicScheme();authCache.put(target, basicScheme);// Add AuthCache to the execution contextHttpClientContext context = HttpClientContext.create();context.setCredentialsProvider(credentialsProvider);context.setAuthCache(authCache);return context; }

    注:其中使用的 WebDavConfig 是配置登錄地址、用戶名、密碼等相關配置類

上傳附件
public static String upload(String fileName, InputStream inputStream) {if (null == inputStream) {return null;}String path = config.getBaseUrl() + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) + "/";// 生成文件名String suffix = fileName.substring(fileName.lastIndexOf("."));String newFileName = Snowflake.getInstance().nextId() + suffix;HttpClient client = WebDavInitUtil.initHttpClient();HttpClientContext context = WebDavInitUtil.initContext();try {if (!existDir(path, client, context)) {// 不存在目錄則創建mkDirs(path, client, context);}String fileUri = path + newFileName;HttpPut put = new HttpPut(fileUri);InputStreamEntity entity = new InputStreamEntity(inputStream);put.setEntity(entity);int status = client.execute(put, context).getStatusLine().getStatusCode();if (status == HttpStatus.SC_OK) {return fileUri;}} catch (IOException e) {logger.error("error uploading file to webDav server.", e);}return null; }
下載附件
public static void download2Stream(String filePath, OutputStream out) {// 判斷是否以http開頭,如果不是的話就是缺少基礎的url,補全if (!filePath.startsWith(Constants.START_STR)) {filePath = config.getBaseUrl() + filePath;}HttpClient client = WebDavInitUtil.initHttpClient();HttpClientContext context = WebDavInitUtil.initContext();HttpGet get = new HttpGet(filePath);try {HttpResponse response = client.execute(get, context);int statusCode = response.getStatusLine().getStatusCode();if (statusCode == HttpStatus.SC_OK) {HttpEntity entity = response.getEntity();StreamUtil.transStream(entity.getContent(), out);EntityUtils.consume(entity);return;}} catch (IOException e) {logger.error("Download file to OutputStream error.", e);}throw new WebDavException("Download file to OutputStream error."); }
創建文件夾
public static Boolean mkDirs(String path, HttpClient client, HttpClientContext context) throws IOException {String temDir = path;if (path.startsWith(Constants.START_STR)) {temDir = path.replaceAll(config.getBaseUrl(), "");}String[] dirs = temDir.split("/");String uri = config.getBaseUrl();for (String dir : dirs) {uri = uri + dir + "/";if (existDir(uri, client, context)) {logger.info(uri + ",已存在");continue;}if (mkdir(uri, client, context) != HttpStatus.SC_CREATED) {return false;}}return true; }
執行創建目錄請求
private static Integer mkdir(String dir, HttpClient client, HttpClientContext context) throws IOException {HttpMkcol mkcol = new HttpMkcol(dir);int retCode = client.execute(mkcol, context).getStatusLine().getStatusCode();logger.info("創建目錄" + dir + ",結果為:" + retCode);return retCode; }
判斷目錄/文件是否存在
public static Boolean existDir(String path, HttpClient client, HttpClientContext context) throws IOException {if (!path.startsWith(Constants.START_STR)) {path = config.getBaseUrl() + path + "/";}logger.info("待判斷路徑:" + path);HttpPropfind propfind = new HttpPropfind(path, DavConstants.PROPFIND_BY_PROPERTY, 1);HttpResponse response = client.execute(propfind, context);int statusCode = response.getStatusLine().getStatusCode();logger.info("判斷目錄是否存在,返回值:" + statusCode);return DavServletResponse.SC_MULTI_STATUS == statusCode; }

參考:

Jackrabbit-webdav接口調用Example

webdav 概覽

webDav說明

總結

以上是生活随笔為你收集整理的webDav之jackrabbit-webdav基础操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。