1. 程式人生 > >七牛伺服器獲取檔案內容

七牛伺服器獲取檔案內容

專案需求中涉及到從七牛伺服器上獲取檔案內容,並在郵件附件中展示以及能夠支援預覽和下載。

七牛伺服器與大多數伺服器相同,相信小夥伴們通過搜尋引擎,都能瞭解到,大部分伺服器獲取檔案內容的程式碼都是根據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;

如果有小夥伴想要深度瞭解這部分內容的話,請留言。知無不言言無不盡。前提:力所能及之下。

最後,祝願開發路上的小夥伴們,永不脫髮!