资讯专栏INFORMATION COLUMN

blob和base64转文件并通过ajax上传到服务器

tuomao / 1233人阅读

摘要:有时候,我们不想通过上传本地图片的方式上传图片,而是通过相机拍照,将这个拍照后的图片直接上传到服务器上,不需要保存到本地。现在我们来通过的或者方法对象对象来通过上传图片。

有时候,我们不想通过上传本地图片的方式上传图片,而是通过相机拍照,将这个拍照后的图片直接上传到服务器上,不需要保存到本地。
比如,用video模拟一个摄像头,通过webrtc调用摄像头的方式拍一张照,然后通过canvas通过getContext("2d")获取的绘图对象CanvasRenderingContext2DdrawImage(video, x, y, width, heigth)方法将video图像通过canvas直接画到html页面上,用来呈现拍照后的结果。
通常的做法是用

的方式上传图片的。但这种方式是要求图片具体存在的,本地或者url路径上的。
现在我们来通过canvas的toDataURL或者toBlob方法、File对象、FormData对象来通过ajax上传图片。

第二种方式,通过base64转码,这里只看js代码
这是canvas调用toDataURL方法将图片base64编码

</>code

  1. let base64 = canvas.toDataURL(); // 同样通过canvas的toDataURL方法将canvas图片Base64编码
  2. let bstr = atob(base64.split(",")[1]); // atob是将base64编码解码,去掉data:image/png;base64,部分
  3. let n = bstr.length;
  4. let u8arr = new Uint8Array(n);
  5. while (n--) {
  6. u8arr[n] = bstr.charCodeAt(n);
  7. }
  8. // 写法同上
  9. let file2 = new File([u8arr], "a.jpg", {type: "image/jpg"})
  10. let formData = new FormData()
  11. formData.append("file", file2)
  12. console.log(formData)
  13. $.ajax({
  14. url: "/a",
  15. type: "POST",
  16. processData: false,
  17. contentType: false,
  18. cache: false,
  19. data: formData,
  20. success(res) {
  21. console.log("上传完成!")
  22. }
  23. })

其上两种写法皆可
下面是后台代码,这里用的是java

</>code

  1. @Controller
  2. public class IndexCtronller {
  3. @RequestMapping(value = "/a", method = RequestMethod.POST)
  4. public ResponseEntity index(MultipartFile file) { // 通过MultipartFile对象接收文件
  5. String contextPath = "C:UsersdaggerDesktop"; // 上传文件路径
  6. File file1 = new File(contextPath, "a.jpg");
  7. try {
  8. file.transferTo(file1); // 将文件保存到服务器桌面
  9. } catch (IOException e) {
  10. e.printStackTrace();
  11. }
  12. return null;
  13. }
  14. }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/106638.html

相关文章

  • blobbase64文件通过ajax上传务器

    摘要:有时候,我们不想通过上传本地图片的方式上传图片,而是通过相机拍照,将这个拍照后的图片直接上传到服务器上,不需要保存到本地。现在我们来通过的或者方法对象对象来通过上传图片。 有时候,我们不想通过上传本地图片的方式上传图片,而是通过相机拍照,将这个拍照后的图片直接上传到服务器上,不需要保存到本地。比如,用video模拟一个摄像头,通过webrtc调用摄像头的方式拍一张照,然后通过canva...

    bingchen 评论0 收藏0
  • 前端文件上传(js/vue.js/axios/canvas图片压缩)

    摘要:哈哈主要还是我嫌麻烦四上传图片这里的页面样式,图片压缩和预览都和上面一样,这里我主要配置一下的,让接口能够成功上传。如果想让用户有更好的体验,可以对图片进行一下压缩和本地预览。 一、通过Form表单提交上传 HTML enctype属性必不可少 上面一种方法通过表单自有属性进行提交,看似简单,但是也有其最大的缺点,那就是提交...

    Luosunce 评论0 收藏0
  • 前端文件上传(js/vue.js/axios/canvas图片压缩)

    摘要:哈哈主要还是我嫌麻烦四上传图片这里的页面样式,图片压缩和预览都和上面一样,这里我主要配置一下的,让接口能够成功上传。如果想让用户有更好的体验,可以对图片进行一下压缩和本地预览。 一、通过Form表单提交上传 HTML enctype属性必不可少 上面一种方法通过表单自有属性进行提交,看似简单,但是也有其最大的缺点,那就是提交...

    Lsnsh 评论0 收藏0
  • 前端js压缩图片上传

    公司最近有需要压缩上传图片功能,查找了些资料并实现了一把。 主要用到的原生组件:FileReader、Canvas、Blob、FormData 逻辑步骤: FileReader.readAsDataURL将上传的图片文件转为Base64格式 将img绘制到canvas上,canvas.toDataURL压缩图片 new Blob将压缩后的Base64转为Blob格式 FormData.appen...

    peixn 评论0 收藏0
  • JS压缩上传图片

    摘要:读取文件文件对象加载图片图片地址的图片转图片转图片对象图片质量到之间缩放比例到之间超过这个值无法生成,在上方式一低版本兼容性差些文件类型文件大小质量大小方式二文件类型文件大小质量大小上传上传的地址文件对象处理上传进度上传中反馈 * @Date: 2016/11/17 0017 * @Time: 10:14 * @Author: lxbin * * Created with ...

    luxixing 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<