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

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

使用 Jersey 在 REST 服務(wù)中上傳多個文件

使用 Jersey 在 REST 服務(wù)中上傳多個文件

皈依舞 2023-03-17 15:22:45
這里有很多鏈接建議使用multipart/form-data以及如何在此處上傳文件。對于通過 CURL 命令上傳到 REST 服務(wù)并接受FormDataMultiPart.目前服務(wù)中的代碼如下所示:@javax.ws.rs.POST@javax.ws.rs.Path("/sample-bulk")@javax.ws.rs.Consumes(javax.ws.rs.core.MediaType.MULTIPART_FORM_DATA)public javax.ws.rs.core.Response bulkUpload(@FormDataParam("file") org.glassfish.jersey.media.multipart.FormDataMultiPart multiPart) {    log.info("{} log", multiPart.getField("file"));    return Response.ok().build();}我嘗試調(diào)用該服務(wù)的 CURL 如下:curl -X POST " http://localhost:37200/api/sample-bulk " -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "file=@/Users/ naman/Desktop/Media/video.mp4;type=video/mp4"但它會導(dǎo)致multiPart服務(wù)null,當(dāng)然還有 NPE。我在這里錯過了什么愚蠢的事情嗎?
查看完整描述

3 回答

?
嗶嗶one

TA貢獻1854條經(jīng)驗 獲得超8個贊

問題出在方法參數(shù)上( 的存在@FormDataParam)


public Response bulkUpload(@FormDataParam("file") FormDataMultiPart multiPart) {}

@FormDataParam當(dāng)您想以聲明方式從多部分請求中提取各個部分時使用,而FormDataMultiPart用于獲取整個多部分正文并以編程方式提取每個部分??梢杂幸粋€嵌套的多部分,其中一個完整的多部分是一個單獨的部分(在這種情況下你可以使用),但這里不是這種情況。


如果您刪除@FormDataParam("file"),那么它將按預(yù)期工作。您可以使用您正在使用的方法開始從多部分中提取部分getField(fieldName)。這將為您提取的每個部分提供一個FormDataBodyPart。FormDataBodyPart#getValueAs(InputStream.class)如果您希望該部分作為,您可以使用 獲取數(shù)據(jù)InputStream,或者您可以使用File.class或byte[].class,無論您喜歡什么。這就是如何從FormDataMultiPart.


每個部分都有自己的名稱,您可以使用該名稱提取部分。對于您的 cURL 請求,您發(fā)送了一個部分,該部分的名稱是file. 即"file=@/Users/..."。因此,如果您想發(fā)送另一部分,只需添加另一個名稱不同的參數(shù)1,如 Vladimir 所述:


curl -X POST "http://localhost:37200/api/sample-bulk"\

     -H "accept: application/json"\

     -H "Content-Type: multipart/form-data"\

     -F "file1=@/Users/naman/Desktop/Media/video.mp4"\

     -F "file2=@/Users/naman/Desktop/Media/another_video.mp4"

正如我之前提到的,@FormDataParam用于以聲明方式提取部件。您使用零件的名稱作為注釋值。因此,使用之前的 cURL 命令,您可以做到。


public Response bulkUpload(

        @FormDataParam("file1") InputStream file1,

        @FormDaraParam("file1") FormDataContentDisposition file1Fdcd,

        @FormDataParam("file2") InputStream file2,

        @FormDaraParam("file2") FormDataContentDisposition file2Fdcd) {

}

您可以獲得有關(guān)部件的信息,例如來自FormDataContentDisposition.

腳注

  1. 零件也可以有相同的名稱,例如

    -F file=@path_to_file1-F file=@path_to_file2

    這就是當(dāng)您嘗試以編程方式獲取零件時,您得到的是 FormDataBodyParts 列表而不是單個對象的原因,即

    FormDataMultiPart multiPart = ...
    List<FormDataBodyPart> files = multiPart.getField("file");

    而且,如果您想以聲明方式獲取它們,則可以使用 aList而不是單個對象類型

    public Response upload(@FormDataParam("file") List<InputStream> files) { ... }


查看完整回答
反對 回復(fù) 2023-03-17
?
慕虎7371278

TA貢獻1802條經(jīng)驗 獲得超4個贊

Use this parameter 


public Response uploadFile(@FormDataParam("files") List<FormDataBodyPart> file) 


Use for loop


 for (int j = 0; j < files.size(); j++) {

   FormDataBodyPart this_formDataBodyPartFile = files.get(j);

   ContentDisposition this_contentDispositionHeader = this_formDataBodyPartFile

                                                    .getContentDisposition();

   InputStream this_fileInputStream = this_formDataBodyPartFile.getValueAs(InputStream.class);

                                            FormDataContentDisposition fileDetail = (FormDataContentDisposition) this_contentDispositionHeader;


//Write the code upload code   }


查看完整回答
反對 回復(fù) 2023-03-17
?
達令說

TA貢獻1821條經(jīng)驗 獲得超6個贊

嘗試為每個多部分條目使用單獨的 -F 標志,例如:

curl -X POST " http://localhost:37200/api/sample-bulk " -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "file=@/Users/ naman/Desktop/Media/video.mp4" -F "type=video/mp4"


查看完整回答
反對 回復(fù) 2023-03-17
  • 3 回答
  • 0 關(guān)注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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