我正在使用一个Web应用程序,该应用程序需要使用iOS Safari上载PDF,JPEG,JPG或PNG。
我正在使用FormData通过jQuery Ajax上传多个文件。我在JavaScript文件中使用了以下代码。
function longPollUpload(array, index){
var list = ['LIDC001', 'LIDC011', 'LIDC034', 'LIDC037', 'LIDC034a', 'LIDC035', 'LIDC036', 'LIDC014', 'LIDC002'];
var data = array[index];
jQuery.ajax({
url: contextPath + "/Upload2",
data: data,
cache: false,
contentType: false,
processData: false,
type: 'POST',
success: function(response){
var responseText = JSON.parse(response);
if (responseText.message == 'success') {
var item = list[index];
$("#"+item).val(responseText[item] || "");
index++;
if (index < array.length) {
longPollUpload(array, index)
}else {
hideNotice();
showPdfReport();
saveMandatory();
}
} else {
hideNotice();
showAlert("Something went wrong!");
}
}
});
}
当我在发送请求之前检查FileList的值时,它具有文件名,大小等。但是当通过ServletFileUpload在控制器中解析请求时,我得到0字节的文件大小。我在控制器中使用了下面的代码。我想知道在iOS中上传时可能导致0字节文件大小的原因。我在Chrome桌面和Android上进行了测试,但是上传没有问题。
if (ServletFileUpload.isMultipartContent(request)) {
try {
if(SESSION != null && SESSION.getAttribute("companyCode") != null){
compName = (String) SESSION.getAttribute("companyCode");
List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
Map<String, List<FileItem>> = new HashMap<>();
for (FileItem items : multiparts) {
if (!items.isFormField()) {
String name = new File(items.getName()).getName();
if (!(name.equals(null) || name.equals(""))) {fileMap
String str[] = items.getFieldName().split("#");
String docTypeCode = str[3];
if(fileMap.get(docTypeCode) == null){
List<FileItem> fileItemList = new ArrayList<>();
fileItemList.add(items);
fileMap.put(docTypeCode, fileItemList);
}
else {
fileMap.get(docTypeCode).add(items);
}
}
}
}