我需要通過AJAX調(diào)用將文件從extjs頁面上傳到服務(wù)器.我可以用簡單的HTML頁面來實現(xiàn)它,但是使用extjs(v4.0.7)我在解析請求時沒有在我的servlet中獲取文件. Servlet識別多部分頁面,但呼叫沒有任何附件.誰能告訴我我的代碼中出錯了什么?
EXTJS代碼:
var fileName = Ext.getCmp("fileName").getValue();Ext.Ajax.request({ url : 'UploadServlet', method: 'POST', headers: {'Content-Type': 'multipart/form-data'}, params :{ 'fileName': fileName.trim() }, success: function ( result, request ) { resultData = result.responseText; }, failure: function ( result, request ) { resultData = result.responseText; } });
Servlet代碼:
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { ....... // Check that we have a file upload request isMultipart = ServletFileUpload.isMultipartContent(request); response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter( ); if( !isMultipart ){ // display no file attached error return; } // Create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory factory.setSizeThreshold(maxMemSize); // Location to save data that is larger than maxMemSize. factory.setRepository(new File(tempDir)); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // maximum file size to be uploaded. upload.setSizeMax( maxFileSize ); try{ // Parse the request to get file items. ////// fileItems is empty, ////nothing is comming from extjs page///////// List<FileItem> fileItems = upload.parseRequest(request); // Process the uploaded file items Iterator<FileItem> i = fileItems.iterator(); while ( i.hasNext () ) { FileItem fi = (FileItem)i.next(); if ( !fi.isFormField () ) { // Get the uploaded file parameters String fieldName = fi.getFieldName(); String fileName = fi.getName(); String contentType = fi.getContentType(); boolean isInMemory = fi.isInMemory(); long sizeInBytes = fi.getSize(); // check if file exists File propFile = new File(tempDir, fileName.substring( fileName.lastIndexOf("\\"))); if (!propFile.exists()) { // Write the file if( fileName.lastIndexOf("\\") >= 0 ){ file = new File(tempDir fileName.substring( fileName.lastIndexOf("\\"))) ; }else{ file = new File( tempDir fileName.substring(fileName.lastIndexOf("\\") 1)) ; } //InputStream uploadedStream = fi.getInputStream(); fi.write( file ) ; out.println("Uploaded Filename: " fileName " is in " filePath "<br>"); } ..... } }
解決方法:
您無法使用AJAX上傳文件.
Ext的Ajax可以模仿它.請參閱doc of the request
方法.您必須使用表單和isUpload選項.
但是,由于您無論如何都必須使用表單,因此您應(yīng)該查看Ext.form.field.Field
(并且,正如文檔中建議的那樣,到Ext.form.Basic.hasUpload
;這將使您更好地理解文件上載有問題).
編輯:事實上,HTML5 and XMLHttpRequest Level 2增加了對文件上傳的支持.但是,不會改變你在Ext中處理它的方式.
來源:https://www.icode9.com/content-4-409801.html