第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

使用RestTemplate請求將多部分文件作為POST參數(shù)發(fā)送

使用RestTemplate請求將多部分文件作為POST參數(shù)發(fā)送

呼啦一陣風(fēng) 2019-11-29 10:33:07
我正在使用Spring 3和RestTemplate。我基本上有兩個(gè)應(yīng)用程序,其中一個(gè)必須將值發(fā)布到另一個(gè)應(yīng)用程序。通過休息模板。當(dāng)要發(fā)布的值是String時(shí),它是完美的工作,但是當(dāng)我必須發(fā)布混合和復(fù)雜的參數(shù)(例如MultipartFiles)時(shí),我會收到轉(zhuǎn)換器異常。例如,我有這個(gè):App1- PostController:@RequestMapping(method = RequestMethod.POST)public String processSubmit(@ModelAttribute UploadDTO pUploadDTO,         BindingResult pResult) throws URISyntaxException, IOException {    URI uri = new URI("http://localhost:8080/app2/file/receiver");    MultiValueMap<String, Object> mvm = new LinkedMultiValueMap<String, Object>();    mvm.add("param1", "TestParameter");    mvm.add("file", pUploadDTO.getFile()); // MultipartFile    Map result = restTemplate.postForObject(uri, mvm, Map.class);    return "redirect:postupload";}另一方面...我有另一個(gè)Web應(yīng)用程序(App2),它從App1接收參數(shù)。App2- ReceiverController@RequestMapping(value = "/receiver", method = { RequestMethod.POST })public String processUploadFile(        @RequestParam(value = "param1") String param1,        @RequestParam(value = "file") MultipartFile file) {    if (file == null) {        System.out.println("Shit!... is null");    } else {        System.out.println("Yes!... work done!");    }    return "redirect:postupload";}我的application-context.xml:<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">    <property name="messageConverters">        <list>            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />            <bean class="org.springframework.http.converter.FormHttpMessageConverter" />            <bean class="org.springframework.http.converter.StringHttpMessageConverter" />            <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />        </list>    </property></bean>所以我的問題是:是否可以使用POST通過RestTemplate發(fā)送MultipartFile?我必須使用某些特定的轉(zhuǎn)換器來發(fā)送此類對象嗎?我的意思是在配置中要使用一些MultipartFileHttpMessageConverter嗎?
查看完整描述

3 回答

?
牛魔王的故事

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊

解決此問題而無需使用需要磁盤上文件的FileSystemResource的一種方法是使用ByteArrayResource,這樣您就可以在帖子中發(fā)送字節(jié)數(shù)組(此代碼在Spring 3.2.3中有效):


MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();

final String filename="somefile.txt";

map.add("name", filename);

map.add("filename", filename);

ByteArrayResource contentsAsResource = new ByteArrayResource(content.getBytes("UTF-8")){

            @Override

            public String getFilename(){

                return filename;

            }

        };

map.add("file", contentsAsResource);

String result = restTemplate.postForObject(urlForFacade, map, String.class);

我重寫B(tài)yteArrayResource的getFilename,因?yàn)槿绻也坏玫娇罩羔槷惓#@然,這取決于java激活.jar是否在類路徑中,如果存在,它將使用文件名來嘗試確定內(nèi)容類型)


查看完整回答
反對 回復(fù) 2019-11-29
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

前幾天,我也遇到了同樣的問題。Google搜索將我?guī)У搅诉@里和其他幾個(gè)地方,但沒有一個(gè)提供解決此問題的方法。我最終將上傳的文件(MultiPartFile)保存為tmp文件,然后使用FileSystemResource通過RestTemplate上傳它。這是我使用的代碼


String tempFileName = "/tmp/" + multiFile.getOriginalFileName();

FileOutputStream fo = new FileOutputStream(tempFileName);


fo.write(asset.getBytes());    

fo.close();   


parts.add("file", new FileSystemResource(tempFileName));    

String response = restTemplate.postForObject(uploadUrl, parts, String.class, authToken, path);   



//clean-up    

File f = new File(tempFileName);    

f.delete();

我仍在尋找解決此問題的更優(yōu)雅的方法。


查看完整回答
反對 回復(fù) 2019-11-29
  • 3 回答
  • 0 關(guān)注
  • 2796 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號