我已经编写了一个后端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 代码用于简洁目的。如果需要,我很乐意将它们包括在内。
答案 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); }