后台(java)接收前台文件上传,微信小程序文件上传

后台接收前台文件上传,微信小程序文件上传

因为初次进行一个小项目,出现不少问题,总结一些问题点,便于后期查阅。

一个简单的文件上传,前台提交文件,后台接收处理,ssm框架实现

前端页面用form表单提交,记得加上enctype="multipart/form-data"属性,用于定义传输编码,当然也可以用其他方式进行传输,这里只亲自测试了该种方式可行。

前端html代码:

	<form action="fileHandle/getExcel" enctype="multipart/form-data" method="post"> 
		<label>选择文件</label> 
		<input name="myfile" type="file"/><!-- name属性用于后台接收文件 -->
		<input type="submit" value="提交"/> 
	</form>

事先要配置好spring的配置文件,这里就不多说了。

后端接收文件:

多方百度后用了MultipartFile类接收,用该类需要导入jar包,我用了maven。后面打印文件信息要用到jxl的jar中的一些类,一起把代码粘贴了。
有些文章说还要导入io包,但是fileupload 1.3版本之后就兼容了io包,因此只需导一个就可以了。

maven代码为:

<!-- 文件传输  -->
	<dependency> 
		<groupId>commons-fileupload</groupId> 
		<artifactId>commons-fileupload</artifactId> 
		<version>1.3.3</version> 
	</dependency>
<!-- jxl -->
	<dependency>
		 <groupId>net.sourceforge.jexcelapi</groupId>
		 <artifactId>jxl</artifactId>
		 <version>2.6.12</version>
	</dependency>

spring-mvc.xml文件增加配置:

<!-- 定义文件上传解析器 --> 
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
          <!-- 设定默认编码 --> 
          <property name="defaultEncoding" value="UTF-8"></property> 
          <!-- 设定文件上传的最大值5MB,5*1024*1024 --> 
          <property name="maxUploadSize" value="5242880"></property> 
    </bean>

controller层的代码:

接收到了文件,将里面的信息全部打印出来,这里是上传的excel表格,xls格式。
如果是xlsx格式的表格,Workbook 接收会报错,可以将文件打开另存为xls格式。还有一点是如果文件设密码jxl会报异常。

package controller;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
@Controller
@RequestMapping("fileHandle")
public class FileHandle {
@RequestMapping(value="getExcel")
	//这里value值与form中的input上传中的name相对应
	public void getFile(HttpServletRequest request,@RequestParam(value="myfile") MultipartFile file){
		System.out.println("后台输出:"+file.getOriginalFilename());//打印出文件名
		Workbook rwb;
		try {
			rwb = Workbook.getWorkbook(file.getInputStream());//将MultipartFile类型转成字节流,强转成(File)会报错
			Sheet rs=rwb.getSheet(0);
			int clos=rs.getColumns();//得到所有的列
			int rows=rs.getRows();//得到所有的行
		
	        System.out.println(clos+" rows:"+rows);
	        
	        for (int i = 0; i < rows; i++) {
	        	for (int j = 0; j < clos; j++) {
	        		//第一个是列数,第二个是行数
	        		//默认最左边编号也算一列 所以这里得j++
	        		System.out.print(rs.getCell(j, i).getContents()+"\t");
	        	}
	        	System.out.println();
	        }
		} catch (BiffException | IOException e) {
			e.printStackTrace();
		}
	}
}
效果图:
前端页面提交

前端页面显示

用wps打开的xls文件

原excel打开表格

上传后控制台显示结果

控制台输出情况

补充

在后台接收到信息可以对信息进行处理,可保存新文件,也可分类存入数据库。

微信小程序的文件上传

微信小程序的js代码

//从本地挑选文件
wx.chooseMessageFile({
  count:1,
  type: 'file',
  success(res) {
    var path = res.tempFiles[0].path;//文件资源地址
    wx.showModal({
      title: '提示',
      content: '确认您的选择:' + res.tempFiles[0].name,
      success(res) {
        if (res.confirm) {
        console.log('用户点击确定')
          //将文件传给开发者服务器
          wx.uploadFile({
            url: 'http://localhost:8080/test/fileHandle/getExcel',//后台接口
            header: { "Content-Type": "multipart/form-data" },//类型
            filePath: path,//文件路径
            name: 'myfile',//文件名
            success(res) {
              console.log('传输成功')
            }
          })
        } else if (res.cancel) {
          console.log('用户点击取消')
        }
      }
    })
开发工具微信界面

微信界面

开发工具显示信息

开发工具显示信息

后端数据接收与之前相同,结果也相同,就不再截图了。
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
微信小程序后台上传大文件,您可以采用以下步骤来操作: 1. 将大文件切分为小块:由于微信小程序对上传文件大小有限制,通常限制在10MB左右,因此您需要将大文件切分为较小的块进行上传。可以使用文件分片技术将文件拆分为多个块。 2. 选择上传方式:微信小程序提供了多种上传方式,包括普通表单上传、WebSocket上传、分片上传等。您可以根据实际情况选择适合的上传方式。 3. 分片上传:如果您选择了分片上传方式,首先需要在前端将文件切分为多个块,并逐个发送到后台后台接收到每个块后,可以进行存储或合并操作。 4. 后台处理:后台需要接收前端发送的文件块,并进行存储或处理。您可以使用服务器端的编程语言和框架来实现后台的文件接收和处理逻辑。 5. 合并文件:如果您选择了分片上传方式,后台需要将接收到的所有文件块进行合并,以还原完整的大文件。合并后的文件可以存储在服务器上或其他云存储服务中。 6. 完成上传:一旦文件上传完成,前端可以接收到上传成功的回调或响应,您可以根据需要进行相应的处理。 需要注意的是,大文件上传可能会占用较多的服务器资源和带宽,建议在上传过程中进行一定的限流和安全措施,以保障系统的稳定性和安全性。此外,还要根据实际情况合理设置文件上传的超时时间和错误处理机制。 希望以上提供的步骤对您有所帮助!如有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值