上传enctype
① ajax上传文件提交时,enctype=multipart/form-data怎么带过去
form中的字段,加上get set方法
private FormFile file;
private String filename;
private String filesize;
action 部分:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String dir="D:/";
UpFileForm uff=(UpFileForm)form;
FormFile file=uff.getFile();
if(file.getFileSize()==0){
return mapping.findForward("success");
}
String fname=file.getFileName();
String size=Integer.toString(file.getFileSize())+"bytes";
InputStream streamIn=file.getInputStream();
OutputStream streamOut=new FileOutputStream(dir+"/"+fname);
int bytesRead=0;
byte[] buffer=new byte[8192];
while((bytesRead=streamIn.read(buffer,0,8192))!=-1){
streamOut.write(buffer,0,bytesRead);
}
streamOut.close();
streamIn.close();
uff.setFilename(fname);
uff.setFilesize(size);
file.destroy();
return mapping.findForward("success");
}
这样将上传的文件存在d盘。
② 前端上传文件的几种方法
1.表单上传
最传统的图片上传方式是form表单上传,使用form表单的input[type=”file”]控件,打开系统的文件选择对话框,从而达到选择文件并上传的目的。
form表单上传
表单上传需要注意以下几点:
(1).提供form表单,method必须是post。
(2).form表单的enctype必须是multipart/form-data。
javascript学习交流群:453833554
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码。HTML表单如何打包数据文件是由enctype这个属性决定的。enctype有以下几种取值:
application/x-www-form-urlencoded:在发送前编码所有字符(默认)(空格被编码为’+’,特殊字符被编码为ASCII十六进制字符)。
multipart/form-data:不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
text/plain:空格转换为 “+” 加号,但不对特殊字符编码。
默认enctype=application/x-www-form-urlencoded,所以表单的内容会按URL规则编码,然后根据表单的提交方法:
method=’get’ 编码后的表单内容附加在请求连接后,
method=’post’ 编码后的表单内容作为post请求的正文内容。
③ form 在上传文件时用enctype字段有什么用处
FORM元素的enctype属性指定了表单数据向服务器提交时所采用的编码类型,默认的缺省值是“application/x-www-form-urlencoded”。
这种编码方式在表单发送之前都会将内容进行urlencode 编码。(空格转换为“+”,特殊字符转化为ASCII的HEX值)。
比如我们在表单域中的
firstname填入 bb ,,
最后发送之前得到的结果就是: bb+%2C%2C
然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。
在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上载。
浏览器端<form>表单的ENCTYPE属性值为multipart/form-data,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,<input>的type属性必须是file。
④ 文件上传时加上enctype="multipart/form-data"获取不到值
HashMapmap=newHashMap();StringdisplayImage="";//采用apache工具包进行文件上传操作DiskFileItemFactoryfactory=newDiskFileItemFactory();ServletFileUploapload=newServletFileUpload(factory);//解析请求信息Listfileitems=upload.parseRequest(request);for(FileItemitem:fileitems){if(item.isFormField()){//简单表单信息处理Stringname=item.getFieldName();Stringvalue=item.getString();//转换下字符集编码value=newString(value.getBytes("iso-8859-1"),"utf-8");map.put(name,value);}else{//原文件名Stringfilename=item.getName();if(filename.length()>0){StringdotName="";intindex=filename.lastIndexOf('.');if(index>0){dotName=filename.substring(index);}//生成新的文件名SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddHHmmss");filename=sdf.format(newDate())+dotName;displayImage="UploadFile/"+filename;Stringdir=application.getRealPath("UploadFile");System.out.print(dir);item.write(newFile(dir,filename));//删除临时文件item.delete();}}}