Ajax图片上传到后端

使用Ajax实现前端传图片到后端

具体思路:使用document.getElementById('idname').files[0]获取元素;

再通过formData.apend("keyname",value)添加到formData中去;

最后通过Ajax将数据发送到后端,后端将request转为MultipartHttpServletRequest对象,然后对MultipartHttpServletRequest对象写到具体目录;

HTML

<div>
    <p> 选择文件:<input id="upload_file1" type="file" name="files">
    <p> 选择文件:<input id="upload_file2" type="file" name="files">
        <input type="button" value="提交" onclick="upload()">
</div>

JavaScript

function upload() {
       var formData = new FormData();
       formData.append("file1", document.getElementById('upload_file1').files[0]);
       formData.append("file2", document.getElementById('upload_file2').files[0]);
       $.ajax({
           url : 'http://localhost:8090/user/file',
           type : 'POST',
           data : formData, // 上传formdata封装的数据包
           dataType : 'JSON',
           cache : false, // 不缓存
           processData : false, // jQuery不要去处理发送的数据
           contentType : false, // jQuery不要去设置Content-Type请求头
           success : function(data) {
               alert("success");
           }
       });
   }

后端(这里的后端使用了两种方式写入文件)

 @PostMapping("/file")
    @CrossOrigin
    public String uploadFile(HttpServletRequest request, HttpServletRequest response, HttpSession session) throws IOException {
        log.info("进入file");
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        MultipartFile multipartFile = multipartRequest.getFile("file1");//file是form-data中二进制字段对应的name

       // multipartFile.transferTo(new File("D:\\userhead"+ UUID.randomUUID()+multipartFile.getOriginalFilename()));
        log.info("multipartFile.toString()--------");
        log.info(multipartFile.getOriginalFilename());
        log.info(multipartFile.toString());
        log.info("打印大小---");
        System.out.println(multipartFile.getSize());
        //拼接路径
        String address="D:\\userhead\\"+ UUID.randomUUID()+multipartFile.getOriginalFilename();
        log.info(address);
        //直接用transforto存储
        multipartFile.transferTo(new File(address));
//使用文件流写入
//        File filex=new File(address);
//        InputStream is=null;
//        FileOutputStream fos=null;
//        byte[] buffer=new byte[100*1024];
//        try{
//            //获取输入流
//            is=multipartFile.getInputStream();
//            //输出流
//            fos=new FileOutputStream(address);
//            int len=0;
//            log.info("开始读写");
//            while((len=is.read(buffer))>0){
//                fos.write(buffer,0,len);
//            }
//            fos.flush();
//            is.close();
//            fos.close();
//        }catch (IOException e) {
//            log.info("文件上传失败!");
//        }

        return " ";
    }

我踩的坑:Ajax的url一定要写对,我在idea里面按住CTRL键可以跳转到具体位置,但是我的端口号是错的,端口号一定要写自己项目配的端口号。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值