SSM 上传多个文件也可以上传多张图片

SSM 可上传多个文件使用form表单的异步提交,可做参考哟

 html 代码块:

<form class="layui-form" id="formreset" enctype="multipart/form-data">
	<div class="layui-form-item">
		<button type="button" id="updateDrug" class="layui-btn"
			onclick="addFile()">多文件上传</button>
		<button class="layui-btn" lay-submit="" lay-filter="formDemo">立即提交</button>
		<div class="layui-form-item">
			<input type="file" id="attachment" class="hidden"
				onchange="upAttachment()" hidden />
			<div id="container" class="container"
				style="padding-top: 5px;width:84%;display:none;margin-left:55px;">
				<table>
					<thead>
						<tr>
							<th style="width:10%;">序号</th>
							<th style="width:30%;">文件名</th>
							<th style="width:30%;">图片</th>
							<th style="width:10%;">大小</th>
							<th style="width:10%;">类型</th>
							<th style="width:10%;">移除</th>
						</tr>
					</thead>
					<tbody>

					</tbody>
				</table>
			</div>
		</div>
	</div>
</form>

 

JS代码

function addFile() {
    $('#container').show();
    var html = '<tr>';
    html += '<td><input type="file" name="pictures" id="idpictures" style="display:none;" onchange="processFiles(this,this.files)">' + ($('#container tbody tr').length + 1) + '</td>';
    html += '<td></td>';
    html += '<td><img src="" style="width: 150px;margin: 0px auto;display: block;" class="tdImg" /></td>';
    html += '<td></td>';
    html += '<td></td>';
    html += '<td><input type="button" value="移除" onclick="delFile(this)" class="layui-btn layui-btn-danger"></td>';
    html += '</tr>';

   $('#container table tbody').append(html);
   $('#container table tbody tr:last-child td:first-child>input').click();
    
}

// 选择文件
function processFiles(t, files) {
    if (files == null || files.length <= 0) {
        delFile(t); // 移除
    }

    var file = files[0];
    var name = file.name; // 名称
    var img = file.webkitRelativePath;//路径
    var size = change(file.size); // 大小
    var type = file.type; // 类型
    var arr = $(t).parent('td').parent('tr').find('td');

    if (arr.length >= 1) $(arr[1]).html(name);
    if (arr.length >= 2) {
        $(arr[2]).find('img').attr('src', window.URL.createObjectURL(file));//显示图片在表格里
    }
    if (arr.length >= 3) $(arr[3]).html(size);
    if (arr.length >= 4) $(arr[4]).html(type);
}

//移除不需要的图片
function delFile(t) {
    $(t).parent('td').parent('tr').remove();
}

// js中字节B转化成KB,MB,GB
function change(limit) {
    var size = "";
    if (limit < 0.1 * 1024) { // 小于0.1KB,则转化成B
        size = limit.toFixed(2) + "B"
    } else if (limit < 0.1 * 1024 * 1024) { // 小于0.1MB,则转化成KB
        size = (limit / 1024).toFixed(2) + "KB"
    } else if (limit < 0.1 * 1024 * 1024 * 1024) { // 小于0.1GB,则转化成MB
        size = (limit / (1024 * 1024)).toFixed(2) + "MB"
    } else { // 其他转化成GB
        size = (limit / (1024 * 1024 * 1024)).toFixed(2) + "GB"
    }

    var sizeStr = size + ""; // 转成字符串
    var index = sizeStr.indexOf("."); // 获取小数点处的索引
    var dou = sizeStr.substr(index + 1, 2) // 获取小数点后两位的值
    if (dou == "00") { // 判断后两位是否为00,如果是则删除00
        return sizeStr.substring(0, index) + sizeStr.substr(index + 3, 2)
    }
    return size;
}

 

ajaxSubmit()提交表单,使用第三方插件jquery.form实现;

         // 显示加载页面
            var loadIndex = layer.load(0, {
                shade: 0.3
            }); // 0代表加载的风格,支持0-2
         //整个表单提交
            $("#formreset").ajaxSubmit({
                type: 'POST',
                // 可选get
                url: ctx + "/drug/insertdrug.do",
                // 这里是接收数据的PHP程序
                data: {
                    type: type
                },        
                // 传给PHP的数据,多个参数用&连接
                dataType: 'json',
                // 服务器返回的数据类型 可选XML ,Json jsonp script html text等
                scriptCharset: 'UTF-8',
                success: function(data, textStatus) {
                    layer.close(loadIndex);
                    if (data.state == 'ok') {
                        layer.msg(data.msg);
                        selectData(); // 刷新查询
                    } else {
                        layer.msg(data.msg);
                    }
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    layer.close(loadIndex);
                    layer.msg('保存失败:' + errorThrown);
                }
            });

后台代码:

/**
	 * 新增
	 * 
	 * @param type  
	 * @param data   表单提交过来保存其他的字段
	 * @param file  上传文件获取的数据
	 * @param request
	 * @return
	 */
        //pictures 要跟name值对应
	@RequestMapping(value = "/insertdrug", produces = { "application/json;charset=UTF-8" })
	@ResponseBody
	public String insert(String type,Drugdata data,
			@RequestParam(value = "pictures", required = false) MultipartFile[] file,
			HttpServletRequest request) {
		JSONObject json = new JSONObject();
		json.put("msg", "");
		json.put("state", "no");
		String msg = "";
		String state = "no";
		boolean isdelete = false;
		data.setIsdelete(isdelete);
		try {
			String ss = "";
			String path = "";
			for (MultipartFile mf : file) {
				System.out.println(file.length);
				if (!mf.isEmpty()) {
			    // 使用UUID给图片重命名,并去掉四个“-”
				String name = UUID.randomUUID().toString()
								.replaceAll("-", "");
				// 获取文件的扩展名
				String ext = FilenameUtils.getExtension(mf
								.getOriginalFilename());
				// 设置图片上传路径
				String url = request.getSession().getServletContext()
								.getRealPath("/upload");
				System.out.println(url);
						// 以绝对路径保存重名命后的图片
				mf.transferTo(new File(url + "/" + name + "." + ext));
						// 把图片存储路径保存到数据库
				path = "upload/" + name + "." + ext;
				  }
					ss = ss + path + ","; 	//我这里是一个字段保存多张图片,所以要拼接起来 ','分隔符
					System.out.println(ss);
				}
			
				ss = ss.substring(0, ss.length() - 1);// 截取后面多余的一个分隔符
				data.setPicture(ss);
				int intR = drugdataService.insert(data);
				if (intR > 0) {
					state = "ok";
					msg = "新增成功";
				} else {
					state = "no";
					msg = "新增失败";
				}
			
		} catch (Exception e) {
			msg = e.getMessage();
		}
		json.put("msg", msg);
		json.put("state", state);
		return json.toString();
	}

就这样就可以上传成功了^.^,不会的可以参考一下

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,需要在前端页面中设置一个文件上传的表单,可以使用HTML中的input标签来实现: ```html <form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" multiple="multiple"/> <input type="submit" value="上传"/> </form> ``` 其中,`enctype="multipart/form-data"`表示使用多媒体表单进行数据提交,`input`标签中的`name`属性必须为`file`,`multiple="multiple"`表示可以一次上传多个文件。 然后,在后台的Controller中添加对应的处理方法: ```java @RequestMapping(value = "/upload", method = RequestMethod.POST) @ResponseBody public String upload(HttpServletRequest request, HttpServletResponse response) throws IOException { // 1. 获取上传文件 MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request; MultipartFile file = multipartHttpServletRequest.getFile("file"); // 2. 设置保存路径 String savePath = request.getSession().getServletContext().getRealPath("/") + "upload/"; File saveFile = new File(savePath); if (!saveFile.exists()) { saveFile.mkdir(); } // 3. 写入文件 String filename = file.getOriginalFilename(); File destFile = new File(savePath + filename); if (!destFile.exists()) { destFile.createNewFile(); } FileUtils.copyInputStreamToFile(file.getInputStream(), destFile); // 4. 返回结果 return "上传成功!"; } ``` 其中,`MultipartHttpServletRequest`用于处理多媒体请求,`getFile("file")`方法用于获取上传文件。`getRealPath("/")`方法获取当前Web应用的根目录,`FileUtils.copyInputStreamToFile()`方法用于将上传文件写入磁盘中。 最后,需要在`springmvc.xml`中配置文件上传的相关Bean: ```xml <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8"/> <property name="maxUploadSize" value="2097152"/> </bean> ``` 其中,`CommonsMultipartResolver`是SpringMVC中默认的文件上传解析器,`maxUploadSize`属性用于设置最大上传文件大小。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值