2016-11-10 4 views
3

Ich habe ein Back-End-Servlet geschrieben, um den Upload von Dateien mit der instantUpload-Funktion von sap.m.UploadCollection in Openui5 zu behandeln. Während ich mehrere Dateien auf den Server hochlade, habe ich die sap.m.UploadCollection anstelle der sap.ui.unified.FileUploader gewählt. Wenn ich versuche, eine Liste von FileItem Instanzen aus der HttpServletRequest im Servlet parsen, gibt es mir die AusnahmeHochladen von Dateien mit sap.m.UploadCollection in Openui5 mit einem Back-End-Servlet funktioniert nicht

die Anforderung enthält keine multipart/form-data oder multipart/mixed Strom

Die ServletFileUpload.isMultipartContent(request) gibt mir offensichtlich eine false zurück und bestätigt mir, dass es sich nicht um eine multipart/form-data-Anfrage handelt.

XML-Code:

<UploadCollection id="UploadCollection1" 
      multiple="true" 
      sameFilenameAllowed="true" 
      showSeparators="All" 
      change="onChangeUploadCollection" 
      fileDeleted="onFileDeleted" 
      selectionChange="onSelectionChange" 
      uploadComplete="onUploadCompleteUploadCollection" 
      beforeUploadStarts="onBeforeUploadStarts" 
      items="{path : '/record/uploadcollectionitems', templateShareable : 'true'}" 
      uploadUrl="{/record/upload}" 
      mode="SingleSelectLeft"> 

      <toolbar> 
       <OverflowToolbar id="myId1"> 
        <Title id="attachmentTitle1" /> 
        <ToolbarSpacer /> 
        <Button id="downloadButton1" text="Download" press="onDownloadItem" 
         enabled="false" type="Transparent"></Button> 
       </OverflowToolbar> 
      </toolbar> 
      <items> 
       <UploadCollectionItem documentId="{documentId}" 
        fileName="{fileName}" mimeType="{mimeType}" 
        url="{url}" enableEdit="true" enableDelete="true" 
        visibleDelete="true" visibleEdit="true" 
        statuses="{path : '/record/uploadcollectionitems', templateShareable : 'true'}" 
        selected="false"> 
        <statuses> 
         <ObjectStatus title="{Status}" visible="false" 
          state="{state}" icon="{icon}" iconDensityAware="{iconDensityAware}" 
         textDirection="{textDirection}" /> 
        </statuses> 
       </UploadCollectionItem> 
      </items> 
</UploadCollection> 

Die uploadURL in den XML-Punkten auf das Servlet, die Ausführung beginnt, nachdem die Auswahl der Datei auf dem Front-End erfolgt.

Wenn ich die Fileuploader anstelle des UploadCollection verwenden möchten, es kodiert die Anforderung erfolgreich als multipart/form-data, aber es ist nicht meine Anforderungen erfüllen.

Ich habe auch versucht content-type als HeaderParameter hinzufügen und auf multipart/form-data, um die Einstellung der Anfrage als multipart/form-data zu machen. Da ein solcher Schritt nicht ratsam ist, habe ich ihn in der Mitte abgebrochen.

Da das Steuerelement sap.m.UploadCollection das Steuerelement sap.ui.unified.FileUploader verwendet und Abhängigkeiten zu diesem Steuerelement enthält, ist es verwirrend, warum das erste das HttpServletRequest nicht als multipart/form-data sendet.

Hinweis: ich nicht die entsprechenden JavaScript Code oder die Servlet Code der Kürze halber Zwecke aufgenommen haben. Ich werde sie gerne bei Bedarf hinzufügen.

Antwort

1

Wenn Sie genauer in den Code schauen, werden Sie sehen, dass der von der UploadCollection verwendete FileUploader immer instanziiert wird, wenn useMultipart auf false gesetzt ist. Sie haben keine Chance, dies zu ändern, es sei denn, Sie greifen in die Erstellung des FileUploader ein. Ich bin mir nicht sicher, warum dieser Ansatz gewählt wurde.

+0

Vielen Dank für Ihre Antwort. Anstatt in die Erstellung der FileUploader-Instanz zu intervenieren und den usingMultipart auf true zu setzen, habe ich tatsächlich die Funktionen 'copy' und 'copyLarge' von commons.io.IOUtils zum Hochladen verwendet die Dateien. –

Verwandte Themen