javajsp文件上传(java文件上传的几种方式)

发布时间:2023-12-08

javajsp文件上传(java文件上传的几种方式)

更新: 2022-11-11 20:25

本文目录一览:

  1. jsp 大文件分片上传处理如何实现?
  2. jsp 如何实现文件上传和下载功能?
  3. java编程:怎么用JSP(javabean)上传一张图片到服务器的指定文件夹呢?
  4. jsp文件的上传为什么会出现错误,想请教各位朋友们?
  5. 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"enctypemethod别写错了! 写一个简单的吧!

<%@ 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文件中。该组件有以下几个特点:

  1. 使用简单。在JSP文件中仅仅书写三五行java代码就可以搞定文件的上传或下载,方便。
  2. 能全程控制上传。利用jspSmartUpload组件提供的对象及其操作方法,可以获得全部上传文件的信息(包括文件名,大小,类型,扩展名,文件数据等),方便存取。
  3. 能对上传的文件在大小、类型等方面做出限制。如此可以滤掉不符合要求的文件。
  4. 下载灵活。仅写两行代码,就能把Web服务器变成文件服务器。不管文件在Web服务器的目录下或在其它任何目录下,都可以利用jspSmartUpload进行下载。