上传文件怎么转二进制文件流传给后台?

-一个大坑 2018-09-19 03:43:30
页面文本框很多,我想用serialize提交
$("#paymentFrom").serialize()

var formData = new FormData();
formData.append("file",$("#file").get(0).files[0]);
用FormData的话不能传$("#paymentFrom").serialize(),后台接收是空的

所以我想把上传的文件转成文件流给后台,或者其它能用serialize的方法传文件
...全文
5285 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
longmuxin 2018-12-06
  • 打赏
  • 举报
回复
直接用formdata获取整个表单
-一个大坑 2018-09-20
  • 打赏
  • 举报
回复
网上找了FileReader类型,不知道是只能转图片还是怎么回事,等了半天没效果

var word= $('#file')[0].files[0];
var reader = new FileReader();
//onloadend读取完成时触发,无论读取成功或失败
reader.onloadend = function(){
//打断点一直进不来
var str1=reader.readAsArrayBuffer(word);
var str2=reader.readAsBinaryString(word);
var str3=reader.readAsDataURL(word);
$('#tableView').append(str1);
$('#tableView').append(str2);
$('#tableView').append(str3);
};
-一个大坑 2018-09-20
  • 打赏
  • 举报
回复
引用 5 楼 u013116426 的回复:


//返回图片dataURL,参数:图片格式和清晰度(0-1)
var pageData = canvas.toDataURL('image/jpeg', 1.0);
//方向默认竖直(p竖向l横向),尺寸ponits,格式a4or[595.28,841.89]
var pdf = new jsPDF('l', 'mm', [intWidth, intHeight]);
pdf.addImage(pageData, 'JPEG', 0, 0, intWidth,intHeight);
var datauri = pdf.output('dataurlstring');
var strBase64 = datauri.substring(28);
........
data: {strBase64: strBase64,strName:strName},

我看到我前面用的网页转pdf,有直接把pdf转成二进制字符串传到后台保存
就发帖问下看能不能把上传的word也转成二进制字符串传给后台,这样就是传字符比较方便传
___紫菜 2018-09-20
  • 打赏
  • 举报
回复
引用 4 楼 happy4944 的回复:
[quote=引用 3 楼 u013116426 的回复:]
确实,分开的话需要请求两次。不过我之前接的一个项目像这种上传都是分开提交的

分开的话保存有点麻烦,先看下有没有别的更好处理方法。我的文档是转成二进制保存在数据库的,页面保存到多个表提交内容也很多[/quote]
-一个大坑 2018-09-20
  • 打赏
  • 举报
回复
引用 3 楼 u013116426 的回复:
确实,分开的话需要请求两次。不过我之前接的一个项目像这种上传都是分开提交的

分开的话保存有点麻烦,先看下有没有别的更好处理方法。我的文档是转成二进制保存在数据库的,页面保存到多个表提交内容也很多
___紫菜 2018-09-20
  • 打赏
  • 举报
回复
引用 2 楼 happy4944 的回复:
[quote=引用 1 楼 u013116426 的回复:]
你可以先单独上传文件之后 再提交表单,顺便做个限制 没上传文件不让提交表单

我也想过分开传,但是不知道要怎么做。而且分开传就要分开保存,这样好像不太好[/quote]
确实,分开的话需要请求两次。不过我之前接的一个项目像这种上传都是分开提交的
-一个大坑 2018-09-20
  • 打赏
  • 举报
回复
引用 1 楼 u013116426 的回复:
你可以先单独上传文件之后 再提交表单,顺便做个限制 没上传文件不让提交表单

我也想过分开传,但是不知道要怎么做。而且分开传就要分开保存,这样好像不太好
-一个大坑 2018-09-20
  • 打赏
  • 举报
回复
写出来了,记录下

var word= $('#file')[0].files[0];
var reader = new FileReader();
reader.readAsDataURL(word);
reader.onloadend = function(){
var strBase64 = reader.result.substring(84);
ajax({
...........
})
};
reader.onerror=function(){
alert('上傳文件失敗,請聯繫IT!');
}
mansion_sun 2021-07-14
  • 举报
回复
@-一个大坑 reader.result.substring(84); 是什么意思,为啥要截取呢?readAsDataURL不是解析成URL了吗,这也不是文件流吧?
___紫菜 2018-09-19
  • 打赏
  • 举报
回复
你可以先单独上传文件之后 再提交表单,顺便做个限制 没上传文件不让提交表单
mansion_sun 2021-07-14
  • 举报
回复
@___紫菜 单独上传需要上传借口和文件服务器支持,题主的问题就是前端上传文件流保存到数据库,同问,现在用这种方式的很少了

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧