javaWeb(文件上传和邮件发送)

本文详细介绍了JavaWeb中的文件上传和邮件发送。文件上传涉及流程、注意事项、准备工作及关键类FileItem和ServletFileUpload的使用。邮件发送部分讲解了SMTP和POP3协议,邮件发送和接收原理,并提供了带图片和附件的邮件发送代码示例。
摘要由CSDN通过智能技术生成

* 文件上传

(1) 文件上传的流程图:

在这里插入图片描述如图所示,这就是一个简易的文件上传的过程,用户想要上传一个文件,首先要让浏览器支持文件上传,通过网络传输,将文件上传到远程的服务器,然后把文件传到服务器中的Web应用中,进而保存在FileSystem中。

(2) 文件上传的注意事项
  • 上传文件应该在外界无法直接访问的目录下,比如 WEB-INF目录下
  • 为了防止文件覆盖,上传的文件要有唯一的文件名,可以采用 时间戳(不完全安全) uuid MD5
  • 要限制上传文件的大小
  • 可以限制上传文件的类型,在收到上传文件名时,判断后缀名是否合法
  • 在这里也要注意,文件上传,在页面表单提交时,一定采用的是post提交,因为get上传文件大小有限制只有几kb,post上传文件大小无限制
(3) 文件上传的准备工作
  • 下载jar包
  • https://mvnrepository.com/artifact/commons-io/commons-io
  • https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload
  • 导入jar包
(4) 对于文件上传所需要的类的介绍
FileItem类
  • 在HTML页面input 必须有 name 表单
  • 如果包含一个文件上传输入项的话,这个表单的enctype属性就必须设置multipart/form-data
  • 常用方法介绍:
//isFormField方法用于判断FileItem类对象封装的数据是一个普通文本表单
//还是一个文件表单,如果是普通表单字段则返回true,否则返回false
boolean isFormField();

//getFieldName方法用于返回表单标签name属性的值。
String getFieldName();
//getString方法用于将FileItem对象中保存的数据流内容以一个字符串返回
String getString();
    
//getName方法用于获得文件上传字段中的文件名。
String getName();

//以流的形式返回上传文件的数据内容。
InputStream getInputStream()

//delete方法用来清空FileItem类对象中存放的主体内容
//如果主体内容被保存在临时文件中,delete方法将删除该临时文件。
void delete();
ServletFileUpload 类
package com.yues.servlet;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
import java.util.UUID;

public class UploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        try {
        
            if (!ServletFileUpload.isMultipartContent(request)) {
                return;//如果是普通文件,我们可以直接返回
            } //通过这个if,说明我们的表单是带文件上传的;

            String uploadPath = this.getServletContext().getRealPath("/WEB-INF/upload");
            File uploadFile = new File(uploadPath);
            if (!uploadFile.exists()) {
                uploadFile.mkdir();
            }

            //临时路径,假如文件超过了预期的大小,我们就把他放到一个临时文件中,过几天自动删除,或者提醒用户转存为永久
            String tmpPath = this.getServletContext().getRealPath("/WEB-INF/tmp");
            File file = new File(tmpPath);
            if (!file.exists()) {
                file.mkdir();
            }
            //建议使用 Apache的文件上传组件来实现,common-f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值