JavaWeb接受处理前台图片

14 篇文章 0 订阅
2 篇文章 0 订阅

啥也不说,直接上代码

//maven项目依赖地址
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.4</version>
    </dependency>
/**
     * 适用于apache下的fileupload jar包:处于底层servlet控制器
     * @param req
     * @param savePath
     * @param image
     * @return
     * @throws IOException
     * @throws FileUploadException
     */
    private Image saveImg(HttpServletRequest req,  HttpServletResponse resp,String savePath, Image image) throws IOException, FileUploadException {
        String token = req.getParameter("token");
        //对token值的处理
        if (!Objects.equals(token, artSaveImgKey)) {
            image.setError(1);
            return image;
        }
        //获取前段图片
        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
        //创建核心解析类
        ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);

        //将上传资源打包成list
        List<FileItem> list = servletFileUpload.parseRequest(req);

        //传入service处理并返回image对象
        //遍历上传的所有图片
        for (FileItem fileItem :
                list) {
            if (fileItem.isFormField()) {
                continue;
            }
            //获取图片名称
            String fileName = fileItem.getName();
            //工具类生成图片名称
            String uuidFileName = UuidUtil.getUuidFileName(fileName);
            //获取输入流
            InputStream inputStream = fileItem.getInputStream();
            //获取文件上传的路径:
            String path = this.getServletContext().getRealPath(savePath);
            //对接输出流
            String saveURL = path + "\\" + uuidFileName;
            OutputStream outputStream = new FileOutputStream(saveURL);
            int len = 0;
            byte[] b = new byte[1024];
            while ((len = inputStream.read(b)) != -1) {
                outputStream.write(b,0,len);
            }
            inputStream.close();
            outputStream.close();
            //设置image对象
            // 返回图片访问路径
            String url = req.getScheme() + "://" + req.getServerName()
                    + ":" + req.getServerPort() + "/images/articleImg/" + uuidFileName;
            image.setUrl(url);
        }
        //返回结果
        return image;
    }
//这个是自建Image对象:适用需要返回url和error值的编辑器
package beans;

public class Image extends Img {
    private int error;
    private String url;

    public Image() {
    }

    @Override
    public String toString() {
        return "Image{" +
                "error='" + error + '\'' +
                "url='" + url + '\'' +
                '}';
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public int getError() {
        return error;
    }

    public void setError(int error) {
        this.error = error;
    }
}
//超好用的转json工具类
package web.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class WriteUitl {
    /**
     * 直接将传入的对象序列化为json,并且写回客户端
     * @param obj
     */
    public static void writeValue(Object obj, HttpServletResponse response) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");
        mapper.writeValue(response.getOutputStream(),obj);
    }
    /**
     * 将传入的对象序列化为json,返回
     * @param obj
     * @return
     */
    public static String writeValueAsString(Object obj) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(obj);
    }
}
//就是最后在主方法中调用一下上面的工具类就ok,简单演示如下
private void saveHeadImg(HttpServletRequest req, HttpServletResponse resp) throws FileUploadException, IOException {
        Image image = new Image();
        image = saveImg(req, resp,"/images/articleImg",image);

		//向后端传送json数据代码
        WriteUitl.writeValue(image, resp);
    }
//简单写一下前段代码,哦嘿嘿详细吧
//给按钮绑定点击事件
$("#uploadBtn").on('click',function () {
    loadPreImg();
});
function loadPreImg(){
    //获取上传的图片信息的
        var key = $("#text-user").val();//这个是对应前面工具类中的token值,简单防止损流量攻击,还是得要过滤器,怎么生成随意
        var photo = $("#reportXML")[0].files[0];
        var params = new FormData();
        params.append('file',photo);
        $.ajax({
            url:"/content/art/saveHeadImg.do?token="+key,
            type:"post",
            data:params,
            cache: false,
            contentType: false,
            processData: false,
            success:function (data) {
                alert(data.url);
            }
        });
}
<!--最后就是html中的input了-->
 <form id="uploadForm" enctype="multipart/form-data" style="display: inline-block; " >
          <input class="chooseFile" accept=".jpg,.jpeg,.png" id="reportXML" type="file" name="file" /> 浏览
</form>
<!--被绑定的可怜按钮-->
 <button class="art-title-photo-upload" id="uploadBtn">上传</button>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值