Java-InputStream轉Base64

李文学發表於2024-03-15

首先定義實體物件

/**
 * 圖片資料封裝
 */
@Data
public class PgNewImageDto {
    /**
     * 檔案型別
     */
    private  String fileType;
    /**
     * 檔案資料
     */
    private String fileData;
}

轉換實現

/**
     * 輸入流轉換為實體物件
     * @param inputStream
     * @return
     * @throws Exception
     */
    private PgNewImageDto convertToImgDto(InputStream  inputStream) throws Exception {

        PgNewImageDto imageDto=new PgNewImageDto();
        //複製流
        ByteArrayOutputStream outputStream1= TyIoUtil.cloneInputStream(inputStream);

        InputStream inputStream1= new ByteArrayInputStream(outputStream1.toByteArray());
        String fileType=TyIoUtil.getFileType(inputStream1,false);

        imageDto.setFileType(fileType);

        InputStream inputStream2= new ByteArrayInputStream(outputStream1.toByteArray());
        String fileBase64=TyOkHttpUtil.inputStreamToBase64(inputStream2);
        imageDto.setFileData(fileBase64);

//        //檔案儲存則啟用下面程式碼
//        String fileName= UUID.randomUUID().toString();
//        String foldName=imagesPath.replace("\\","/")+"temp/";
//        String filePath=foldName+fileName+imageDto.getFileType();
//        InputStream inputStream3= new ByteArrayInputStream(outputStream1.toByteArray());
//        TyIoUtil.saveFile(inputStream3,foldName,fileName,imageDto.getFileType());

        inputStream1.close();
        inputStream2.close();
// inputStream3.close();
return imageDto; }

呼叫示例

        //拼接引數
        String xbUserToken=checkResult.getData().toString();
        Map<String, Object> listKv=new HashMap<>();
        listKv.put("xbUserToken",xbUserToken);
        listKv.put("xbAppToken",XbAppToken);
        //拼接路徑
        InputStream inputStream=null;
            try {
                //基礎路徑
                String tgFullUrl=tgRootUrl+URL_NEWS_IMAGE_PATH+picId;
                inputStream=TyOkHttpUtil.doGetFileStream(tgFullUrl,listKv);
                if(ObjectUtil.isEmpty(inputStream)) {
                    objRet.setMsg("圖片介面獲取失敗.");
                    return  objRet;
                }
            }
            catch (Exception ex){
                log.error(ex.getMessage(),ex);
                objRet.setMsg("圖片介面獲取失敗.");
                return  objRet;
            }
            try {
                PgNewImageDto imageDto=convertToImgDto(inputStream);
                inputStream.close();
                objRet.setSuccess(true);
                objRet.setData(imageDto);
                objRet.setMsg("檔案下載完成");
            }
            catch (Exception ex){
                log.error(ex.getMessage(),ex);
                objRet.setSuccess(false);
                objRet.setMsg("檔案下載失敗");
            }
            finally {
                if(inputStream!=null){
                    try {
                        inputStream.close();
                    }
                    catch (Exception ex){

                    }
                }
            }

至此,執行效果達到預期目的,具體效果圖省略

相關文章