javajsp文件上传(java文件上传的几种方式)
更新: 2022-11-11 20:25
本文目录一览:
- jsp 大文件分片上传处理如何实现?
- jsp 如何实现文件上传和下载功能?
- java编程:怎么用JSP(javabean)上传一张图片到服务器的指定文件夹呢?
- jsp文件的上传为什么会出现错误,想请教各位朋友们?
- Jsp上传文件报错:Undefined type: org.lxh.smart.SmartUpload Java
jsp 大文件分片上传处理如何实现?
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求
1.通过form表单向后端发送请求
<form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data">
<div class="bbxx wrap">
<input type="text" id="side-profile-name" name="username" class="form-control">
<input type="file" id="example-file-input" name="avatar">
<button type="submit" class="btn btn-effect-ripple btn-primary">Save</button>
</div>
</form>
改进后的代码不需要form标签,直接由控件来实现。开发人员只需要关注业务逻辑即可。JS中已经帮我们封闭好了
this.post_file = function () {
$.each(this.ui.btn, function (i, n) { n.hide(); });
this.ui.btn.stop.show();
this.State = this.Config.state.Posting;
this.app.postFile({ id: this.fileSvr.id, pathLoc: this.fileSvr.pathLoc, pathSvr: this.fileSvr.pathSvr, lenSvr: this.fileSvr.lenSvr, fields: this.fields });
};
通过监控工具可以看到控件提交的数据,非常的清晰,调试也非常的简单。
2.通过ajax向后端发送请求
$.ajax({
url: "${pageContext.request.contextPath}/UploadServlet",
type: "POST",
data: $('#postForm').serialize(),
success: function (data) {
$('#serverResponse').html(data);
},
error: function (data) {
$('#serverResponse').html(data.status + " : " + data.statusText + " : " + data.responseText);
}
});
ajax分为两部分,一部分是初始化,文件在上传前通过AJAX请求通知服务端进行初始化操作
this.md5_complete = function (json) {
this.fileSvr.md5 = json.md5;
this.ui.msg.text("MD5计算完毕,开始连接服务器...");
this.event.md5Complete(this, json.md5);
var loc_path = encodeURIComponent(this.fileSvr.pathLoc);
var loc_len = this.fileSvr.lenLoc;
var loc_size = this.fileSvr.sizeLoc;
var param = jQuery.extend({}, this.fields, this.Config.bizData, { md5: json.md5, id: this.fileSvr.id, lenLoc: loc_len, sizeLoc: loc_size, pathLoc: loc_path, time: new Date().getTime() });
$.ajax({
type: "GET",
dataType: 'jsonp',
jsonp: "callback",
url: this.Config["UrlCreate"],
data: param,
success: function (sv) {
_this.svr_create(sv);
},
error: function (req, txt, err) {
_this.Manager.RemoveQueuePost(_this.fileSvr.id);
alert("向服务器发送MD5信息错误!" + req.responseText);
_this.ui.msg.text("向服务器发送MD5信息错误");
_this.ui.btn.cancel.show();
_this.ui.btn.stop.hide();
},
complete: function (req, sta) { req = null; }
});
};
在文件上传完后向服务器发送通知
this.post_complete = function (json) {
this.fileSvr.perSvr = "100%";
this.fileSvr.complete = true;
$.each(this.ui.btn, function (i, n) {
n.hide();
});
this.ui.process.css("width", "100%");
this.ui.percent.text("(100%)");
this.ui.msg.text("上传完成");
this.Manager.arrFilesComplete.push(this);
this.State = this.Config.state.Complete;
this.Manager.RemoveQueuePost(this.fileSvr.id);
this.Manager.RemoveQueueWait(this.fileSvr.id);
var param = { md5: this.fileSvr.md5, uid: this.uid, id: this.fileSvr.id, time: new Date().getTime() };
$.ajax({
type: "GET",
dataType: 'jsonp',
jsonp: "callback",
url: _this.Config["UrlComplete"],
data: param,
success: function (msg) {
_this.event.fileComplete(_this);
_this.post_next();
},
error: function (req, txt, err) { alert("文件-向服务器发送Complete信息错误!" + req.responseText); },
complete: function (req, sta) { req = null; }
});
};
这里需要处理一个MD5秒传的逻辑,当服务器存在相同文件时,不需要用户再上传,而是直接通知用户秒传
this.post_complete_quick = function () {
this.fileSvr.perSvr = "100%";
this.fileSvr.complete = true;
this.ui.btn.stop.hide();
this.ui.process.css("width", "100%");
this.ui.percent.text("(100%)");
this.ui.msg.text("服务器存在相同文件,快速上传成功。");
this.Manager.arrFilesComplete.push(this);
this.State = this.Config.state.Complete;
this.Manager.RemoveQueuePost(this.fileSvr.id);
this.Manager.RemoveQueueWait(this.fileSvr.id);
this.post_next();
this.event.fileComplete(this);
};
这里可以看到秒传的逻辑是非常简单的,并不是特别的复杂。
var form = new FormData();
form.append("username", "zxj");
form.append("avatar", file);
$.ajax({
url: "${pageContext.request.contextPath}/UploadServlet",
type: "post",
data: form,
processData: false,
contentType: false,
success: function (data) {
console.log(data);
}
});
java部分
文件初始化的逻辑,主要代码如下:
FileInf fileSvr = new FileInf();
fileSvr.id = id;
fileSvr.fdChild = false;
fileSvr.uid = Integer.parseInt(uid);
fileSvr.nameLoc = PathTool.getName(pathLoc);
fileSvr.pathLoc = pathLoc;
fileSvr.lenLoc = Long.parseLong(lenLoc);
fileSvr.sizeLoc = sizeLoc;
fileSvr.deleted = false;
fileSvr.md5 = md5;
fileSvr.nameSvr = fileSvr.nameLoc;
PathBuilderUuid pb = new PathBuilderUuid();
fileSvr.pathSvr = pb.genFile(fileSvr.uid, fileSvr);
fileSvr.pathSvr = fileSvr.pathSvr.replace("\\", "/");
DBConfig cfg = new DBConfig();
DBFile db = cfg.db();
FileInf fileExist = new FileInf();
boolean exist = db.exist_file(md5, fileExist);
if (exist && fileExist.lenSvr > 1) {
fileSvr.nameSvr = fileExist.nameSvr;
fileSvr.pathSvr = fileExist.pathSvr;
fileSvr.perSvr = fileExist.perSvr;
fileSvr.lenSvr = fileExist.lenSvr;
fileSvr.complete = fileExist.complete;
db.Add(fileSvr);
up6_biz_event.file_create_same(fileSvr);
} else {
db.Add(fileSvr);
up6_biz_event.file_create(fileSvr);
FileBlockWriter fr = new FileBlockWriter();
fr.CreateFile(fileSvr.pathSvr, fileSvr.lenLoc);
}
接收文件块数据,在这个逻辑中我们接收文件块数据。控件对数据进行了优化,可以方便调试。如果用监控工具可以看到控件提交的数据。
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List files = null;
try {
files = upload.parseRequest(request);
} catch (FileUploadException e) {
out.println("read file data error:" + e.toString());
return;
}
FileItem rangeFile = null;
Iterator fileItr = files.iterator();
while (fileItr.hasNext()) {
rangeFile = (FileItem) fileItr.next();
if (StringUtils.equals(rangeFile.getFieldName(), "pathSvr")) {
pathSvr = rangeFile.getString();
pathSvr = PathTool.url_decode(pathSvr);
}
}
boolean verify = false;
String msg = "";
String md5Svr = "";
long blockSizeSvr = rangeFile.getSize();
if (!StringUtils.isBlank(blockMd5)) {
md5Svr = Md5Tool.fileToMD5(rangeFile.getInputStream());
}
verify = Integer.parseInt(blockSize) == blockSizeSvr;
if (!verify) {
msg = "block size error sizeSvr:" + blockSizeSvr + "sizeLoc:" + blockSize;
}
if (verify && !StringUtils.isBlank(blockMd5)) {
verify = md5Svr.equals(blockMd5);
if (!verify) msg = "block md5 error";
}
if (verify) {
FileBlockWriter res = new FileBlockWriter();
if (Integer.parseInt(blockIndex) == 1) res.CreateFile(pathSvr, Long.parseLong(lenLoc));
res.write(Long.parseLong(blockOffset), pathSvr, rangeFile);
up6_biz_event.file_post_block(id, Integer.parseInt(blockIndex));
JSONObject o = new JSONObject();
o.put("msg", "ok");
o.put("md5", md5Svr);
o.put("offset", blockOffset);
msg = o.toString();
}
rangeFile.delete();
out.write(msg);
jsp 如何实现文件上传和下载功能?
上传:
MyjspForm mf = (MyjspForm) form;
FormFile fname = mf.getFname();
byte[] fn = fname.getFileData();
OutputStream out = new FileOutputStream("D:\\" + fname.getFileName());
Date date = new Date();
String title = fname.getFileName();
String url = "d:\\" + fname.getFileName();
Upload ul = new Upload();
ul.setDate(date);
ul.setTitle(title);
ul.setUrl(url);
UploadDAO uld = new UploadDAO();
uld.save(ul);
out.write(fn);
out.close();
下载:
DownloadForm downloadForm = (DownloadForm) form;
String fname = request.getParameter("furl");
FileInputStream fi = new FileInputStream(fname);
byte[] bt = new byte[fi.available()];
fi.read(bt);
response.setContentType("application/msdownload;charset=gbk");
String contentDisposition = "attachment; filename=" + "java.txt";
response.setHeader("Content-Disposition", contentDisposition);
response.setContentLength(bt.length);
ServletOutputStream sos = response.getOutputStream();
sos.write(bt);
return null;
java编程:怎么用JSP(javabean)上传一张图片到服务器的指定文件夹呢?
先导smartupload jar包!在写form表单<input type="file">
,enctype="multipart/form-data"
,method="post"
,enctype
和method
别写错了!
写一个简单的吧!
<%@ page import="com.jspsmart.upload.*" %>
<%
SmartUpload su = new SmartUpload();
try {
su.upload();
} catch (Exception ex) {
ex.printStackTrace();
}
File file = su.getFile().getFile(0);
String filepath = "upload\\";
filepath += file.getFileName();
file.saveAs(filepath, SmartUpload.SAVE_VIRTUAL);
%>
不知道是否建了与它相对应的数据库表啊? 不懂得再玩吧!
jsp文件的上传为什么会出现错误,想请教各位朋友们?
为什么item是空的? 原因就是因为在web.xml中配置了struts的filter
<filter>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter>
改成
<filter>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter>
就可以了 struts2过滤时,会改变request的类型,由httpservletrequest变成multipartrequestwrapper 所以parserequest就返回了null
Jsp上传文件报错:Undefined type: org.lxh.smart.SmartUpload Java
这个错误是由于jsp页面导入jar包错误导致SmartUpload没有找到。
应该是导入com.jspsmart.upload.SmartUpload
这个类。
jspSmartUpload是一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。该组件有以下几个特点:
- 使用简单。在JSP文件中仅仅书写三五行java代码就可以搞定文件的上传或下载,方便。
- 能全程控制上传。利用jspSmartUpload组件提供的对象及其操作方法,可以获得全部上传文件的信息(包括文件名,大小,类型,扩展名,文件数据等),方便存取。
- 能对上传的文件在大小、类型等方面做出限制。如此可以滤掉不符合要求的文件。
- 下载灵活。仅写两行代码,就能把Web服务器变成文件服务器。不管文件在Web服务器的目录下或在其它任何目录下,都可以利用jspSmartUpload进行下载。