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

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

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

瀏覽:15日期: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久久,三上悠亚国产精品一区二区三区
国产精品日韩精品中文字幕| 国产欧美丝祙| 国产精品久久久久久久免费软件| 亚洲免费福利一区| 欧美亚洲三级| 国产一区日韩| 久久久777| 亚洲欧美日韩国产| 国产欧美日韩影院| 91亚洲国产高清| 亚州av乱码久久精品蜜桃| 亚洲3区在线| 97国产成人高清在线观看| 激情五月综合| 免费在线观看精品| 欧美黄色精品| 亚洲福利一区| 日韩精品一区二区三区中文在线 | 合欧美一区二区三区| 每日更新成人在线视频| 日本欧美一区二区| 精品视频国产| 国产视频亚洲| 美腿丝袜亚洲一区| 99久久www免费| 免费精品视频在线| 国产精品magnet| 欧美午夜精品一区二区三区电影| 蜜桃久久av| 免费观看亚洲天堂| 欧美在线亚洲综合一区| 国产视频一区二| 日韩在线看片| 只有精品亚洲| 三上悠亚国产精品一区二区三区| 亚洲免费一区三区| 日韩在线不卡| 欧美一级二区| 亚洲二区免费| 日韩精品成人| 久久精品毛片| 蜜芽一区二区三区| 成人av三级| 日韩精品久久久久久久软件91| 国产一区二区三区亚洲综合| 久久www成人_看片免费不卡| 久久影院资源站| 日韩制服丝袜先锋影音| 日本精品在线中文字幕| 美女国产精品| 日韩欧美少妇| 欧美aaaaaa午夜精品| 亚洲一区二区三区无吗| 日韩欧美不卡| 欧美日韩亚洲一区三区| 久久久久久美女精品| 国产精品一级| 伊人精品久久| 久久影视一区| 精品亚洲免a| 国产欧美日韩视频在线| 亚洲影院天堂中文av色| 99热精品久久| 91视频精品| 国产精品地址| 欧美日韩亚洲一区二区三区在线| 美女精品网站| 欧美日韩精品一本二本三本| 欧美日韩精品免费观看视欧美高清免费大片 | 亚洲天堂资源| 国产精品久久久久77777丨| 亚洲最大av| 先锋影音国产一区| 亚洲国产专区校园欧美| 成人片免费看| 国产成人精品福利| 久久一区视频| 日本va欧美va欧美va精品| 免费一级片91| 久久国产精品久久w女人spa| 亚洲免费黄色| 欧美午夜不卡影院在线观看完整版免费| 久久青青视频| 蜜桃成人精品| 蜜桃视频在线网站| 91免费精品| 日本不卡免费高清视频在线| 国产一区二区三区不卡视频网站| 国产精品久久久久av蜜臀| 国产毛片精品| 欧美日韩亚洲一区| 国产情侣久久| 日韩激情精品| 国产亚洲一区| 国产精品久久久久久久久久白浆| 久久国产人妖系列| 国产精品九九| 精品精品国产三级a∨在线| 四季av一区二区凹凸精品| 91综合视频| 久久久9色精品国产一区二区三区| 九九精品调教| 亚洲激情二区| 免费久久精品视频| 国产视频一区二| 老司机精品视频网| 欧美片第1页| 亚洲一级黄色| 亚洲午夜免费| 国产精品成人一区二区网站软件| 麻豆精品久久久| 日韩成人综合| 亚洲高清毛片| 亚洲精品黄色| 久久亚洲国产精品尤物| 久久久久国产精品一区二区| 国产综合欧美| 免费在线成人网| 国产欧美日韩综合一区在线播放| 久久99国产精品视频| 亚洲啊v在线| 在线综合视频| 视频一区二区三区入口| 人人爱人人干婷婷丁香亚洲| 精品美女在线视频| 婷婷久久一区| 日韩高清一区| 国产一区精品福利| 午夜久久影院| 国产日韩在线观看视频| 国产精品99精品一区二区三区∴ | 久久久久久夜| 激情六月综合| 日韩和欧美一区二区三区| 欧美成人一二区| 亚洲欧美日韩高清在线| 国产日韩1区| 欧美gv在线| 日韩在线网址| 日韩免费高清| 日本综合精品一区| 日韩欧美二区| 97久久亚洲| 久久精品高清| 欧美极品中文字幕| 国产精品手机在线播放| 欧美日韩精品在线一区| 日韩精品一级| 婷婷成人在线| 国产精品男女| 99精品99| 91视频久久| 日本h片久久| 婷婷久久一区| 国产在线一区不卡| 日韩精品欧美大片| 一区二区三区四区在线看| 国产毛片一区二区三区| 一本一道久久a久久精品蜜桃| 国产精品红桃| 中文字幕亚洲影视| 国产超碰精品| 欧美日韩一区二区国产| 美女网站一区| 麻豆国产精品| 欧美一区不卡| 国产农村妇女精品一区二区| 高清一区二区三区| 青青青国产精品| 麻豆精品网站| 99久久精品费精品国产| 老司机免费视频一区二区三区| 91精品电影| 精品日韩视频| 国产精品99久久免费| 亚洲v天堂v手机在线| 亚洲网站视频| 三上亚洲一区二区| 青青国产精品| 亚洲精品自拍| 丝袜美腿亚洲一区二区图片| 亚洲黑丝一区二区| 成人午夜国产| 成人精品久久| 麻豆精品久久久| 国产图片一区| 人人爱人人干婷婷丁香亚洲| 在线亚洲精品| 婷婷综合在线| 欧美日韩激情| 人人精品亚洲| 精品久久亚洲| 日韩国产欧美在线播放| 久久久久久黄| 久久人人97超碰国产公开结果| 精品精品99| 久久超级碰碰| 国产剧情在线观看一区| 偷拍亚洲精品| 亚洲美女久久|