使用带有后端servlet的Openui5中的sap.m.UploadCollection上载文件不起作用

时间:2016-11-10 14:50:23

标签: sapui5

我已经编写了一个后端servlet来处理使用Openui5中instantUpload的{​​{1}}功能上传文件。当我将多个文件上传到服务器时,我选择了sap.m.UploadCollection而不是sap.m.UploadCollection。当我尝试从servlet中的HttpServletRequest解析出一个FileItem实例列表时,它给了我异常

  

请求不包含multipart / form-data或multipart / mixed流

sap.ui.unified.FileUploader显然是给我一个ServletFileUpload.isMultipartContent(request)并确认我不是多部分/表单数据请求。

XML代码:

false

XML中的<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> 指向Servlet,它在前端完成文件选择后开始执行。

如果我选择使用 FileUploader 而不是 UploadCollection ,它会将请求成功编码为multipart / form-data,但它不符合我的要求。

我还尝试将uploadURL添加为HeaderParameter并将其设置为content-type,以便将请求设为multipart/form-data。由于这样的步骤不可取,我已在中途中止了。

由于sap.m.UploadCollection控件使用sap.ui.unified.FileUploader控件并包含对此控件的依赖关系,因此前者不会将HttpServletRequest作为multipart/form-data发送的原因令人困惑。< / p>

注意: 我没有包含相应的 JavaScript 代码或 Servlet 代码用于简洁目的。如果需要,我很乐意将它们包括在内。

2 个答案:

答案 0 :(得分:1)

如果仔细查看代码,您会发现UploadCollection使用的FileUploader始终在useMultipart设置为false的情况下实例化。除非您干预FileUploader的创建,否则您没有机会更改它。我不确定为什么采用这种方法。

答案 1 :(得分:0)

您可以将UploadCollection与multipart一起使用。 在控制器中,您需要:

onBeforeUploadStarts: function(oEvent) {
var oUploadCollection = this.getView().byId("UploadCollection");
         oUploadCollection = oUploadCollection._getFileUploader();
         oUploadCollection.setUseMultipart(true);
}