利用MultipartFile实现文件上传

本文介绍了如何使用MultipartFile在Spring MVC中实现文件上传。通过创建一个包含multipart/form-data的jsp页面,然后在controller中处理文件上传,配合FileTool类进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  今天在做项目的时候,突然要求做一个文件上传程序,下面就简单的总结一下。

首先写一个简单的文件上传jsp页面。

uploadFile.jsp

<form id="form1" method="post" action="files/upload" <span style="color:#FF6666;">enctype="multipart/form-data"</span>>                
    <tr>
        <td width="25%" align="right">上传文件:</td>
        <td><input id="file" type="file" NAME="file" style="width:300px;"></td>
    </tr>
    <tr align="center" valign="middle">
        <td height="60" colspan="2"><input type="submit" ID="BtnOK" value="确认上传"></td>
    </tr>
</form>    
表单 method 属性应该设置为 POST 方法,不能使用 GET 方法。

表单 enctype 属性应该设置为 multipart/form-data

接下来就是写我们controller了。

FileController.java

@Path("files")
public class FileController {
 //设置文件最大限制
 private static final long MAX_FILE_SIZE = 8 * 1024 * 1024;
    @Get("upload")
    public Object upload(){
        return "file/upload";
    }
    @Post("onUpload") /这里必须采用post方法
    @HttpFeatures(contentType = "application/json", charset = "utf-8")
    public  Object onUpload(@Param("file") MultipartFile[] file, Invocation inv) throws Exception {
        JSONObject result = new JSONObject();
        if(file == null || file.length == 0){
            result.put("success",false);
            result.put("message","file empty");
        }else {
            JSONArray uploadFiles = new JSONArray();
            for( MultipartFile f : file){
                JSONObject jsonfile = new JSONObject();
                jsonfile.put("filename", f.getOriginalFilename());
                net.sf.json.JSONObject upResult = FileTool.uploadPic(f, MAX_FILE_SIZE);
                if(upResult.getInt("code") == JSONTool.success){
                    jsonfile.put("uploadFileUrl",upResult.getString("message"));
                }else{
                    throw new Exception(upResult.getString("message"));
                }
                uploadFiles.put(jsonfile);
            }
            result.put("success", true);
            result.put("message", "ok");
            result.put("uploadFiles", uploadFiles);
        }
        return result.toString();
    }
}

当我们接收到文件以后我们就可以把它存起来了

FileTool.java

public static JSONObject uploadPic(MultipartFile file, long maxPicSize) throws IOException {
              //首先判断文件的大小
               if (file == null || file.getSize() == 0) {
			return JSONTool.getReturnJSON(JSONTool.fail, "请重新选择要上传的文件。");
		}
		if (file.getSize() > maxPicSize) {
			return JSONTool.getReturnJSON(JSONTool.fail, "文件大小请不要超过" + maxPicSize / MILLION + "M。");
		}
                //获得文件的名称 
                String filename = file.getOriginalFilename();
                //获得文件的扩展名称
                String extensionName = FileTool.getExtensionName(filename).toLowerCase();
                //判断文件是否是你需要的支持的类型
                if (StringUtils.isNotBlank(extensionName)
				&& !(extensionName.equals("jpg") || extensionName.equals("jpeg") || extensionName.equals("png")
						|| extensionName.equals("bmp") || extensionName.equals("gif") || extensionName.equals("pdf"))) {
			return JSONTool.getReturnJSON(JSONTool.fail, "文件类型不是JPEG,PNG,BMP,PDF或者GIF。");
		}
               //接下来就是把文件存起来了
                 String DISK_PATH = "/home/work/data/cashpay-admin/creditMaintain/";
		// 如果DISK_PATH路径不存在,则创建
		File uploadFilePath = new File(DISK_PATH);
		if (uploadFilePath.exists() == false) {
			uploadFilePath.mkdirs();
		}
		// 生成全局唯一的id
		String guid = GuidCreator.createGuid();
		String localUrl = DISK_PATH + guid + "_" + file.getOriginalFilename();
		boolean saveResult = AppLoadService.saveFile(localUrl, file);
		if (!saveResult) {
			return JSONTool.getReturnJSON(JSONTool.fail, "文件上传出错。");
		}
		JSONObject result = JSONTool.getReturnJSON(JSONTool.success, localUrl);
		result.put("fileName", filename);
		return result;
	}

下面就是把MultipartFile存到磁盘上去

 public class AppLoadService {

	public static boolean saveFile(String localUrl, MultipartFile file) throws IOException {

		File realFile = new File(localUrl);
		OutputStream outputstream = null;
		InputStream inputstream = null;
		try {
			inputstream = file.getInputStream();
			outputstream = new FileOutputStream(realFile);
			byte[] buffer = new byte[1024 * 5];
			int byteRead = -1;
			while ((byteRead = (inputstream.read(buffer))) != -1) {
				outputstream.write(buffer, 0, byteRead);
			}
			realFile.setExecutable(false);
			return true;
		} catch (Exception e) {
			return false;
		} finally {
			if (outputstream != null) {
				outputstream.flush();
				outputstream.close();
			}
			if (inputstream != null) {
				inputstream.close();
			}
		}

	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值