日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

SpringBoot讀寫xml上傳到AWS存儲服務S3的示例

瀏覽:18日期:2023-04-13 18:25:33

最近的工作涉及到了生成xml文件并上傳到AWS存儲服務S3這樣的處理。期間遇到了兩個問題,簡單記錄下:

springboot讀取xml模板異常 將生成的xml上傳到S3的問題

springboot的版本是0,讀寫xml文件使用的是Dom4J,版本是1。逐個說明下遇到的這幾個問題。

1.springboot讀取xml模板異常

現階段是將xml模板文件存儲在springboot項目的resource目錄下的。具體路徑為

template/xxx.xml

最初是通過類加載器獲取文件路徑后再嘗試讀取模板文件的:

String fullPath = TemplateParser.class.getClassLoader().getResource(pathXml).getFile();File file = new File(fullPath);SAXReader reader = new SAXReader();Document document = reader.read(file);

通過類加器獲取到的文件路徑是:

file:/path/of/jar/springboot-xml.jar!/BOOT-INF/classes!/template/xxx.xml

不過我們都知道,springboot是將整個工程包括配置文件打成一個jar包后再直接運行。這樣想在linux的服務器上通過文件路徑找文件是注定找不到的。

后來改成直接通過SpringBoot提供的 ClassResource類來獲取resource路徑下的配置文件:

ClassPathResource resource = new ClassPathResource(pathXml);Document doc = reader.read(resource.getInputStream());

這里直接使用 InputStream讀取的模板文件。注意不要再嘗試通過調用 ClassResource實例的 getFile()方法來獲取文件,不然會遇到和之前同樣的問題。

額,期間還發生了無法將模板文件打進springboot項目運行時的jar文件這樣的問題。因為是將模板文件存儲在了resources的子目錄下,需要調整下maven打包的配置:

<resources> <resource><directory>src/main/resources</directory><filtering>true</filtering><includes> <include>**/*</include></includes> </resource></resources>

下面這幾行如果沒有的話需要加上,不然會讀取不到子目錄中的配置文件:

<includes><include>**/*</include> </includes>

2.將生成的xml上傳到S3

AWS提供的最便捷的上傳文件接口是這個:

public PutObjectResult putObject(String bucketName, String key, File file) throws SdkClientException, AmazonServiceException;

這個接口通過 File實例來執行上傳。所以我一開始的想法是先生成一個臨時文件保存在服務器本地,讀取本地臨時文件為 File執行上傳,最后再刪掉本地的臨時文件。這個思路是沒問題的,在本地執行也OK。但是在生產環境,由于權限相關的問題,生成臨時文件失敗了。

不想再去折騰權限相關的事情,所以將出路寄托在了AWS提供的另一個接口上:

public PutObjectResult putObject( String bucketName, String key, InputStream input, ObjectMetadata metadata) throws SdkClientException, AmazonServiceException;

也就是說考慮將xml文件內容輸出到 InputStream,然后再將InputStream上傳到S3。一切都在內存里執行,不依賴外部文件系統也就不會有文件權限的問題。

這個方案的問題在于 ObjectMetaData這個類有點兒黑箱的意思。該怎么設置需要進行一些摸索。看了一遍這個類的接口文檔,需要調用的也就這兩個set方法:

/** * Set the date when the object is no longer cacheable. */ public void setHttpExpiresDate(Date httpExpiresDate) {this.httpExpiresDate = httpExpiresDate; }/** * <p> * Sets the Content-Length HTTP header indicating the size of the * associated object in bytes. * </p> * <p> * This field is required when uploading objects to S3, but the AWS S3 Java * client will automatically set it when working directly with files. When * uploading directly from a stream, set this field if * possible. Otherwise the client must buffer the entire stream in * order to calculate the content length before sending the data to * Amazon S3. * </p> */ public void setContentLength(long contentLength) {metadata.put(Headers.CONTENT_LENGTH, contentLength); }

其中后者(文件長度)是AWS建議設置的,不設置會在處理的時候給出WARN。根據方法文檔也可以看到,如果不設置,在上傳的時候就會在內存中緩存整個信息流來計算文件長度。

至于前者是上傳到S3文件的緩存過期時間,酌情設置即可。

另一個需要解決的問題就是怎么將Dom4j生成的 Document輸出再讀取到 InputStream中。這里用到了 XmlWritter類,具體實現如下:

XMLWriter xmlWriter = new XMLWriter(outputStream, OutputFormat.createCompactFormat());xmlWriter.write(doc);xmlWriter.close();return new ByteArrayInputStream(outputStream.toByteArray());

驗證了一下,這個方法是可行的。修改后生產環境沒有再報錯。

向AWS S3存儲服務上傳文件的實現代碼在這篇文章里:Java實現上傳文件到AWS S3

End!

以上就是SpringBoot讀寫xml上傳到S3的示例的詳細內容,更多關于SpringBoot讀寫xml的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品综合| 亚洲综合电影| 国产精品久久久久久久久免费高清 | 天堂精品久久久久| 国产一区二区三区成人欧美日韩在线观看| 亚洲91视频| 国产午夜久久av| 欧美日韩国产高清| 老司机精品视频在线播放| 日韩亚洲国产欧美| 福利片在线一区二区| 国产99久久久国产精品成人免费| 日韩精品欧美精品| 免费毛片在线不卡| 久久伊人久久| 亚洲无线观看| 久久精品影视| 国产欧美自拍一区| 美女日韩在线中文字幕| 激情国产在线| 久久国产生活片100| 久热精品在线| 亚洲黄色网址| 国产九一精品| 亚洲一区二区三区四区电影 | 精品日韩一区| 91成人在线| 日韩精品一级中文字幕精品视频免费观看| 狠狠久久伊人| 国产亚洲精品美女久久 | 老司机免费视频一区二区三区| 日韩中文字幕区一区有砖一区 | 久久夜夜操妹子| 精品久久久亚洲| 青草国产精品| 视频一区在线播放| 欧美成人高清| 中文字幕在线免费观看视频| 日本欧美一区二区| 视频在线观看一区二区三区| 国产在线日韩| 欧美一区久久久| 成人综合一区| 久久99久久人婷婷精品综合| 91精品美女| 日本成人在线一区| 亚洲三级精品| 好看不卡的中文字幕| a日韩av网址| 成人亚洲一区| 国产黄色精品| 国产精品成人一区二区网站软件| 欧美影院视频| 日韩在线成人| 亚州av一区| 中文字幕一区二区三区四区久久| 男女精品网站| 蜜桃伊人久久| 日韩在线a电影| 亚洲乱亚洲高清| 一区二区三区网站| 亚久久调教视频| 日韩欧美久久| 日韩av中文在线观看| 日韩精品视频在线看| 日本va欧美va精品发布| 五月激激激综合网色播| 亚洲毛片在线| 日韩一区二区三区免费视频| 亚洲aa在线| 91精品高清| 亚洲欧美激情诱惑| 久久成人一区| 久久国产精品久久w女人spa| 四虎精品一区二区免费| 日韩高清一区在线| 久久精品99国产国产精| 国产精品久久久久9999高清| 国产激情精品一区二区三区| 美女精品视频在线| 成人污污视频| 亚洲一级网站| 国产精品日韩久久久| 久久福利精品| 日本午夜免费一区二区| 久久中文在线| www成人在线视频| 精品一区在线| 亚洲综合小说| 国产欧美91| 97精品97| 最新亚洲激情| 日本免费新一区视频| 免费一区二区三区在线视频| 中文字幕在线看片| 日韩午夜一区| 欧美综合社区国产| 欧美丰满日韩| 午夜电影亚洲| 日韩精品三区四区| 国产精品黑丝在线播放| 欧美精品羞羞答答| 日韩av在线免费观看不卡| 美女视频网站久久| 久久精品二区亚洲w码| 日本精品不卡| 亚洲日韩中文字幕一区| 国产一区调教| 欧美日韩在线播放视频| 亚洲精品日本| 日韩一区二区三区免费播放| 男人的天堂久久精品| 欧美激情一区| 欧美成人久久| 国产精品最新自拍| re久久精品视频| 国产精品地址| 99视频一区| 精品美女久久| 老牛影视一区二区三区| 久久免费视频66| 亚洲少妇诱惑| 精品国产美女a久久9999| 在线一区电影| 精品一区二区三区中文字幕视频| 尤物网精品视频| 久久精品福利| 免费观看在线综合| 韩国三级一区| 欧美日韩午夜| 黄色av一区| 精品淫伦v久久水蜜桃| 亚洲久久一区| 99精品美女| 美女久久久久久| 综合在线一区| 激情欧美亚洲| 精品欧美视频| 欧美一区二区三区久久精品| 午夜久久美女| 91青青国产在线观看精品| 一区在线免费观看| 国产精品成人一区二区不卡| 日韩精品一区二区三区免费视频 | 国产精品毛片| 欧美精选视频一区二区| 国产视频网站一区二区三区| 国产麻豆综合| 天堂а√在线最新版中文在线| 91亚洲精品在看在线观看高清| 国产字幕视频一区二区| 久久中文在线| 欧美啪啪一区| 免费成人性网站| 久久久久国产| 国产中文字幕一区二区三区| 日产欧产美韩系列久久99| 日韩一级网站| 麻豆精品av| 国产精选一区| 日韩国产欧美三级| 亚洲一级大片| 亚洲免费中文| 黄色不卡一区| 久久天堂av| av在线资源| 精品福利久久久| 欧美精品导航| 国产精品香蕉| 日韩va亚洲va欧美va久久| 免费成人av在线播放| 亚洲一区二区三区免费在线观看| 日韩欧美精品一区| 岛国av在线网站| 国产一区二区精品福利地址| 国产精品视频一区二区三区综合| 国产免费成人| 蜜桃视频欧美| 欧美高清不卡| 国产在线日韩| 国产一区亚洲| 欧美+日本+国产+在线a∨观看| 久久久久久婷| а√天堂中文在线资源8| 精品免费av| 国产不卡av一区二区| 老司机免费视频一区二区| 久久精品一区| 成人精品视频| 日韩久久视频| 欧美aa在线观看| 欧美日韩一二三四| 性欧美69xoxoxoxo| 免费看的黄色欧美网站| 免费久久精品视频| 日韩精品电影一区亚洲| 日韩高清在线观看一区二区| 久久国产三级| 国产精品成人自拍| 毛片不卡一区二区|