Apache Commons FileUpload を使用してデータをサーバーにアップロードしています - いくつかのテキスト フィールドと 1 つのファイル項目。ファイルのないテキストフィールドしかない場合があり、このリクエストも続行する必要があります。やろうとするとorg.apache.commons.fileupload.FileUploadException: Stream ended unexpectedly
、行に発生しますList fileItems = upload.parseRequest(request)
。
私のコードがあります:
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
private boolean isMultipart;
private int maxFileSize = 50*1024*1024;
private int maxMemSize = 40*1024;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
...
try {
...
isMultipart = ServletFileUpload.isMultipartContent(request);
if(!isMultipart){
return;
}
DiskFileItemFactory factory = new DiskFileItemFactory(maxMemSize,
new File(properties.getProperty("temp")));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxFileSize);
UploadRequest uploadRequest = new UploadRequest();
try {
List fileItems;
// NEXT LINE EXCEPTION
fileItems = upload.parseRequest(request);
Iterator i = fileItems.iterator();
while(i.hasNext()){
FileItem item = (FileItem)i.next();
if(!item.isFormField()){
String fileName = item.getName();
}
else {
...
}
}
...
ファイルとテキストフィールドを送信すると、すべてのフィールドを読み取ることができます。ファイルを送信しないと、例外のためにテキストフィールドを読み取ることもできません。ファイルなしでテキストのみをロードするソリューションはありますmultipart/form-data
か?