java ee 上传文件_Java EE之通过表单上传文件

public class Ticket

{

private String customerName;

private String subject;

private String body;

private Map attachments = new LinkedHashMap<>();

//...

}

public class Attachment

{

private String name;

private byte[] contents;

//...

}

@WebServlet(

name = "ticketServlet",

urlPatterns = {"/tickets"},

loadOnStartup = 1

)

@MultipartConfig(

fileSizeThreshold = 5_242_880, //5MB

maxFileSize = 20_971_520L, //20MB

maxRequestSize = 41_943_040L //40MB

)

//@MultipartConfig的location告诉浏览器应该在哪里存储临时文件(这里未使用,让应用服务器使用它的默认临时目录即可)

//fileSizeThreshold将告诉Web容器文件必须达到多大才能写入到临时目录中(在本例中,小于5MB的上传文件将保存在内存中。)

//在本例中,maxFileSize设置将禁止上传大小超过20MB的文件。

//在本例中,maxRequestSize设置禁止大小超过40MB的请求。

public class TicketServlet extends HttpServlet

{

//...

}

public class TicketServlet extends HttpServlet

{

//...

//downloadAttachment方法用于处理客户端浏览器的下载请求。

private void downloadAttachment(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException

{

//...

//响应中设置的头Content-Disposition,将强制浏览器询问客户是

//保存还是下载文件,而不是在浏览器中在线打开该文件。

response.setHeader("Content-Disposition",

"attachment; filename=" + attachment.getName());

response.setContentType("application/octet-stream");

//使用ServletOutputStream将文件内容输出到响应中(对大文件处理存在内存问题)

ServletOutputStream stream = response.getOutputStream();

stream.write(attachment.getContents());

}

//...

}

public class TicketServlet extends HttpServlet

{

//...

private void createTicket(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException

{

Ticket ticket = new Ticket();

ticket.setCustomerName(request.getParameter("customerName"));

ticket.setSubject(request.getParameter("subject"));

ticket.setBody(request.getParameter("body"));

Part filePart = request.getPart("file1");

if(filePart != null && filePart.getSize() > 0)

{

Attachment attachment = this.processAttachment(filePart);

if(attachment != null)

ticket.addAttachment(attachment);

}

int id;

synchronized(this)

{

id = this.TICKET_ID_SEQUENCE++;

this.ticketDatabase.put(id, ticket);

}

response.sendRedirect("tickets?action=view&ticketId=" + id);

}

private Attachment processAttachment(Part filePart)

throws IOException

{

//从multipart请求中获得InputStream,并将它复制到Attachment对象中。

InputStream inputStream = filePart.getInputStream();

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

int read;

final byte[] bytes = new byte[1024];

while((read = inputStream.read(bytes)) != -1)

{

outputStream.write(bytes, 0, read);

}

Attachment attachment = new Attachment();

attachment.setName(filePart.getSubmittedFileName());

attachment.setContents(outputStream.toByteArray());

return attachment;

}

//...

}

参考:《Java Web高级编程》第3章 第6节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值