html5中文件域提交,springMVC spring-cloud html5 文件上传

1.     SpringMVC框架的文件上传

a)前台

使用表单文件域完成文件上传,需要在表单中增加相应标签:

表单必须采用POST方式提交数据,因为文件数据放置在请求体中传递,GET方式处理不了,没有请求体。

文件上传采用特殊的方式传递数据,而不是普通的名值对方式,

采用多部件方式提交,   所以在表单标签中需要增加特定属性 :

enctype=”multipart/form-data”

b)配置

springMVC框架需要提供文件上传解析器,需要在配置文件中进行配置,如果是SpringBoot框架,默认已经进行配置,可以直接使用

c)后台

springMVC框架对请求进行了封装,所以可以通过封装后的请求对象来获取上传的文件数据

2.     Spring Cloud文件上传

在Spring Cloud项目中,应用和服务间数据的交互一般采用feign的方式。基本使用没有问题,而且也比较方便,但是进行文件数据的交互就比较麻烦了,所以需要采用其他的方式进行处理。

我们一般创建一个web应用后,需要通过Web浏览器对这个应用中的功能进行访问,然后在浏览器中显示处理的结果(HTML)或进行JS逻辑处理(JSON),但是在某些时候,我们希望在JAVA程序代码中也可以访问这个web系统中的功能,那么就可以采用Spring 3.0框架中的RestTemplate来完成。

RestTemplate简化了发起HTTP请求以及处理响应的过程,简单来说,就是操作web服务更加的容易了。代码操作如下:

dd84826e17a1f99a45479ee844606cca.png

文件上传(发文件)

在Application类中增加RestTemplate配置:

@LoadBalanced              (这个注解必须加因为springcloud是基于spring4.0以后的

而 RestTemplate 是spring3.0)

@Bean

public RestTemplate restTemplate() {

return new RestTemplate();

}

在Controller中,自动配置对应的属性

@Autowired

private RestTemplate restTemplate;

在逻辑方法中,调用restTemplate对象,将文件上传给远程web服务

MultipartFile file =    XXXXXX;

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

String uuid = UUID.randomUUID().toString();

String fileName = file.getOriginalFilename();

final File tempFile = File.createTempFile(uuid, fileName.substring(fileName.lastIndexOf(".")));

file.transferTo(tempFile);

FileSystemResource resource = new FileSystemResource(tempFile);

MultiValueMap param = new LinkedMultiValueMap<>();

param.add("pdfile", resource);

restTemplate.postForObject("http://service-name/url",param,String.class);

文件上传(接收文件)

在web服务的处理方法中增加对应的请求参数接收文件即可

public String depolyProcDef( @RequestParam("pdfile") MultipartFile file )

文件下载(发文件)

在Web服务的处理方法中返回字节数组。逻辑中将文件转换为流后再转换为字节数组即可

public byte[] loadImgById(String id) {

InputStream in = XXXXX;

ByteArrayOutputStream swapStream = new ByteArrayOutputStream();

byte[] buff = new byte[100]; //buff用于存放循环读取的临时数据

int rc = 0;

try {

while ((rc = in.read(buff, 0, 100)) > 0) {

swapStream.write(buff, 0, rc);

}

} catch (IOException e) {

e.printStackTrace();

}

byte[] in_b = swapStream.toByteArray(); //in_b为转换之后的结果

return in_b;

}

在Web服务的处理方法中返回字节数组。逻辑中将文件转换为流后再转换为字节数组即可

public byte[] loadImgById(String id) {

InputStream in = XXXXX;

ByteArrayOutputStream swapStream = new ByteArrayOutputStream();

byte[] buff = new byte[100]; //buff用于存放循环读取的临时数据

int rc = 0;

try {

while ((rc = in.read(buff, 0, 100)) > 0) {

swapStream.write(buff, 0, rc);

}

} catch (IOException e) {

e.printStackTrace();

}

byte[] in_b = swapStream.toByteArray(); //in_b为转换之后的结果

return in_b;

}

文件下载(接收文件)

采用RestTemplate在逻辑方法中接收返回的字节数组再转换为流生成文件即可

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.IMAGE_PNG);

String url = "http://service-name/url";

ResponseEntity response = restTemplate.exchange(

url,

HttpMethod.POST,

new HttpEntity(headers),

byte[].class);

byte[] result = response.getBody();

InputStream in = new ByteArrayInputStream(result);

OutputStream out = resp.getOutputStream();

int i = -1;

while ( (i = in.read()) != -1 ) {

out.write(i);

}

3.     HTML5文件上传

浏览器客户端判断上传文件的大小。

$("#文件域对象ID").change(function(event){

// 获取当前选择的文件 event.target.files

var files = event.target.files, file;

if (files && files.length > 0) {

file = files[0];

}

// 判断上传文件的大小 file.size ,单位字节Byte

// 判断上传文件的类型 file.type

// 本地生成上传文件后的临时文件地址

var URL = window.URL || window.webkitURL;

var imgURL = URL.createObjectURL(file);

});

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值