图片上传功能,java

最近做了个前端上传图片功能
由于不明原因,一直不能直接用上传文件的方式上传图片,因此,把这个问题总结一下
1.通过base64转码上传

前端界面:
html:
主要还是通过
input file上传
<input id="papersPhoto" name="papersPhoto" type="file" class="main1rn" οnchange="preview(this)" placeholder="未选择任何文件" accept="image/gif,image/jpeg,image/png,image/jpg,image/bmp" />
注意:如果是form表单提交,需要在form表头添加 enctype="multipart/form-data"
enctype="multipart/form-data"表示不对表单数据进行编码


js:
 

了一个隐藏的input接收编码


java:
首先要要将编码base64,前面不必要编码去掉
String[] imagesNew = images.split(",");
images = imagesNew[1];
try {
//重命名图片名称
String imageName = System.currentTimeMillis() + "." + imageType;
BASE64Decoder decoder = new BASE64Decoder();
//解码
byte[] decoderBytes = decoder.decodeBuffer(images);
for(int i=0;i<decoderBytes.length;++i) {
if(decoderBytes[i]<0)
{//调整异常数据
decoderBytes[i]+=256;
}
}
// 上传文件路径
String path = request.getSession().getServletContext().getRealPath("resources"+File.separator +"images");
// 图片路径+名称
String fileName = path +File.separator+ imageName;
File filepath = new File(path, fileName);
// 判断路径是否存在,如果不存在就创建一个
if (!filepath.getParentFile().exists()) {
filepath.getParentFile().mkdirs();
}
FileOutputStream write = new FileOutputStream(new File(fileName));
write.write(decoderBytes);
write.flush();
write.close();
2.通过file类接收
上面的方法是前端传送编码,后台解码的方法来上传图片
由于项目限制,本人也是被逼无奈采用这种方式

如果可以,还是采用file类来操作比较简单

1)通过form表提交,
如果是通过form表单提交,那么form表单写法和前面一样,需要注意的java的写法
java
通过MultipartFile file接收参数,如果不能通过MultipartFile接收参数,看下是不是文件解析器没有配置
<!-- 上传文件解释器 -->
   <bean   id="multipartResolver"   class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
     <property   name="defaultEncoding"   value="utf-8"   />
     <property   name="maxUploadSize"   value="10485760"   />
    <property   name="maxInMemorySize"   value="4096"   />
      <property   name="resolveLazily"   value="true"   />
  </bean>

下面只列出主要实现,具体需要看情况
MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;
  MultipartFile file = multipartRequest.getFile("file");//file是页面input的name名
// 上传文件路径
String path = request.getSession().getServletContext().getRealPath("resources"+File.separator +"images");
// 上传文件名
String filename = file.getOriginalFilename();
String prefix=filename.substring(filename.lastIndexOf(".")+1);
filename = new Date().getTime()+"."+prefix;
File filepath = new File(path, filename);
// 判断路径是否存在,如果不存在就创建一个
if (!filepath.getParentFile().exists()) {
filepath.getParentFile().mkdirs();
}
// 将上传文件保存到一个目标文件当中
file.transferTo(new File(path + File.separator + filename));
2)通过ajax提交
没有具体做过使用ajax提交。
但思路大概是引入formdata,通过form提交到后台
大概js是这样的
var file =$( '#file' ).files[ 0 ];
var data = new FormData();
data.append("file", file);
$.ajax({ type: "POST", url: "*******l", data: data, cache: false, contentType: false, //不可缺 processData: false, //不可缺 dataType:"json", success: function(suc) { } }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值