想要一个选择了文件就自动上传的效果,但之前的<input file> 都是写在form表单中来提交的。借助jquery的ajaxfileupload.js,可以这样子弄:
<p>正面:<input name="file1" type="file" value="选择" size="20" id="fileUpload1" onchange ="uploadFile(this,1)"></p>
function uploadFile(obj, type) {
$.ajaxFileUpload({
url : "http://localhost:8081/ws2/servlet/fileUpload",
secureuri : false,// 一般设置为false
fileElementId : "fileUpload"+type,// 文件上传表单的id <input type="file" id="fileUpload" name="file" />
dataType : 'json',// 返回值类型 一般设置为json
data: {'type': type},
success : function(data) // 服务器成功响应处理函数
{
},
error : function(data)// 服务器响应失败处理函数
{
console.log("服务器异常");
}
});
return false;
}
当在打开的框中双击了一个文件后,就会触发onchange事件,把上传的实现代码写中其中即可。
JAVA后台接收(一些路径参数请自行加上):
request.setCharacterEncoding("utf-8");
Map result = new HashMap();
Part part = null; // servlet3.0的文件上传新办法
String jsonp = request.getParameter("jsonpcallback"),
type = request.getParameter("type");
try {
if (type != null) {
part = request.getPart("fileUpload"+type); // 参数为<input type='file' name='参数名' />
}else {
part = request.getPart("fileUpload");
}
// 获取文件名
String header = part.getHeader("content-disposition"),
fileName = getFileName(header),
path = filePath + File.separator + fileName;
File file = new File(filePath); // 建立目录
if (!file.exists()) {
file.mkdirs();
}
//part.write(path); weblogic下用part.write()无法写到指定的路径,它一定会搞到域里面。所以用流来写。从part中获取,不能从request获取
InputStream is = part.getInputStream();
FileOutputStream fos = new FileOutputStream(path);
byte[] b = new byte[1024];
int i = 0;
while ((i = is.read(b)) > -1) {
fos.write(b, 0, i);
}