我需要通過(guò)AJAX調(diào)用將文件從extjs頁(yè)面上傳到服務(wù)器.我可以用簡(jiǎn)單的HTML頁(yè)面來(lái)實(shí)現(xiàn)它,但是使用extjs(v4.0.7)我在解析請(qǐng)求時(shí)沒(méi)有在我的servlet中獲取文件. Servlet識(shí)別多部分頁(yè)面,但呼叫沒(méi)有任何附件.誰(shuí)能告訴我我的代碼中出錯(cuò)了什么?
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>");
}
.....
}
}
解決方法: 您無(wú)法使用AJAX上傳文件.
Ext的Ajax可以模仿它.請(qǐng)參閱doc of the request 方法.您必須使用表單和isUpload選項(xiàng).
但是,由于您無(wú)論如何都必須使用表單,因此您應(yīng)該查看Ext.form.field.Field (并且,正如文檔中建議的那樣,到Ext.form.Basic.hasUpload ;這將使您更好地理解文件上載有問(wèn)題).
編輯:事實(shí)上,HTML5 and XMLHttpRequest Level 2增加了對(duì)文件上傳的支持.但是,不會(huì)改變你在Ext中處理它的方式. 來(lái)源:https://www./content-4-409801.html
|