七牛伺服器獲取檔案內容
阿新 • • 發佈:2018-12-29
專案需求中涉及到從七牛伺服器上獲取檔案內容,並在郵件附件中展示以及能夠支援預覽和下載。
七牛伺服器與大多數伺服器相同,相信小夥伴們通過搜尋引擎,都能瞭解到,大部分伺服器獲取檔案內容的程式碼都是根據URL,獲取資源內容的。
七牛當然也不例外。
故而,如果能拿到伺服器上資源的URL,程式碼就能相對簡單。如:
fileURL就是通過各種輾轉獲取到伺服器上的資源路徑;
ByteArrayOutputStream baos = URLUtils.readBaosByUrlPath(fileURL); MailService.MailAttachment attachment = new MailService.MailAttachment(fileName + suffix, baos); this.sendEmail(to, subject, params, "e-comrise-postinfo", attachment);
public static class MailAttachment { private String file_name; private ByteArrayOutputStream byteArrayOutputStream; public MailAttachment(String file_name, ByteArrayOutputStream byteArrayOutputStream) { this.file_name = file_name; this.byteArrayOutputStream = byteArrayOutputStream; } public String getFile_name() { return file_name; } public ByteArrayResource getResource() { return new ByteArrayResource(byteArrayOutputStream.toByteArray()); } public void closeResource() { try { byteArrayOutputStream.close(); } catch (IOException ex) { ex.printStackTrace(); } } }
那麼,就有小夥伴好奇我這個工具類是怎麼實現的了?廢話不多說,直接上程式碼;
public static ByteArrayOutputStream readBaosByUrlPath(String urlPath) throws IOException { if (!isLegalUrl(urlPath)) return null; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try(InputStream inputStream =new URL(urlPath).openStream()){ IOUtils.copy(inputStream, byteArrayOutputStream); } return byteArrayOutputStream; }
public static Boolean isLegalUrl(String url) {
Pattern pattern = Pattern.compile("[a-zA-z]+://[^\\s]*");
// Pattern p = Pattern.compile("^(http|www|ftp|)?(://)?(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*((:\\d+)?)(/(\\w+(-\\w+)*))*(\\.?(\\w)*)(\\?)?(((\\w*%)*(\\w*\\?)*(\\w*:)*(\\w*\\+)*(\\w*\\.)*(\\w*&)*(\\w*-)*(\\w*=)*(\\w*%)*(\\w*\\?)*(\\w*:)*(\\w*\\+)*(\\w*\\.)*(\\w*&)*(\\w*-)*(\\w*=)*)*(\\w*)*)$",Pattern.CASE_INSENSITIVE );
Matcher matcher = pattern.matcher(url);
if (matcher.find()) {
return isConnection(url);
} else {
return false;
}
}
引入的各種包:
import org.apache.commons.io.IOUtils;
import java.net.URL;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
如果有小夥伴想要深度瞭解這部分內容的話,請留言。知無不言言無不盡。前提:力所能及之下。
最後,祝願開發路上的小夥伴們,永不脫髮!