我有一个表格,表里的一个input要上传文件,请问我这个做法对吗?
1.创建一个input type=“file”然后绑定(click)事件
2.在click事件的function中上传图片到后端API
3.后端API返回文件的URL
4.把URL显示在input中,
5.提交表格按钮创建个submit事件
6.提交表格?
这个办法可以,但是不是ajax的,体验可以改进下。
从逻辑上讲是没什么问题,提个建议,既然是在表格中,那么可以通过font awesome 或者 使用png图标 来做一个按钮,同时搭配一个禁用的删除按钮,可以用title写上按钮的功能,点击后弹出一个上传的界面。上传成功后就把上传的按钮换成下载的按钮,删除的按钮 禁用取消。这样的话更好一些,不要把url暴露在用户面前
直接提交表单将所有数据一起提交就行了,干嘛需要多请求一次服务器?
这个方法没问题,说不上对错,不过后台处理上传文件的时候,如果文件非常大,前台会等待很久就是了。
文件上传为了保证内容不出错都是流传输,其实你也是试试直接提交整个form,然后后台把接收到的流整个保存成TXT
txt内容类似这样:
----[流的头部]------
时间什么的
-----------------------87998794654【一个号】
type=......name=....
内容
-----------------------879879768787【又一个号】
type=......name=....
内容
---------------------。。。【按照你form内各种可提交标签的顺序依次排列,其中某一个就是你的file】
不知道你想达到一个什么目的,如果是为了可以一键上传,可以整体按照流传输传送整个form,然后把这个流解析一下,按照内容分别保存就可以。
如果是为了先上传文件然后能有个缩略图什么的,最早是用iframe单独做一个上传,传送完毕后显示缩略图,和一个hidden的文件url或者文件标记,
上层窗口取出来之后放到正式的form里面,然后通过提交你最前面的form单独传递其他信息。现在是用ajax,在前台处理你的文件,然后分分段向后台post,后台把每次上传的部分分别接收整理成一个文件,这种的好处是可以做进度条,而且前台表现好一些。
https://blog.csdn.net/uniqueweimeijun/article/details/72855655
上边链接有问题哈哈。
表单属性应该还要设置enctype="multipart/form-data"吧
input输入框type为file文件模式,然后通过建立工厂模式区分是普通表单还是文件上传
页面 enctype="multipart/form-data"判定为文件
// 原文件名称
String picName = coursePictureFile.getOriginalFilename();
File updaFile = null;
String newName = null;
String image = request.getParameter("image");
if (!picName.equals("")) {
// 创建新文件名称
newName = UUID.randomUUID().toString()
+ picName.substring(picName.lastIndexOf("."));
// 创建上传图片
updaFile = new java.io.File("F:\\develop\\upload\\temp\\course\\" + newName);
if (!updaFile.exists()) {
updaFile.mkdirs();
}
// 上传文件
coursePictureFile.transferTo(updaFile);
// 删除原来的图片
File deleFile = new File("文件保存路径" + image);
deleFile.delete();
course.setCourseImage(newName);
} else {
course.setCourseImage(image);
}
courseService.insert(course);
return "redirect:/CourseAction/getCourseByPage.action?pageNo=1";
}
不知道是不是你要的
前台
input输入框type为file文件模式,然后通过建立工厂模式区分是普通表单还是文件上传,或者用ant design的组件,好上手好用
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
建议和表单数据一起提交,统一处理。如果是异步的,你这个思路是没什么问题的。
可以利用formdata
没看懂,干嘛要对文件域绑定click事件去提交上传的文件,正常不是点击文件域的浏览按钮选择本地文件上传到服务器吗?
还有你通过绑定的事件去上传文件接着又将服务端什么的url回显到html页面,到时表单提交的时候,文件域本地查找怎么能找到url指定的文件?
按照你得思路来,首先你得保证后台接口能够接受到你上传的文件(也就是文件流了),所以说你form表单肯定要一并提交的。
首先写好前端文件上传的代码:
此时你的上传HTML代码已经写好了,于是你想着如何把上传的文件提交给后台了
然后你跟着自己的想法写了个click事件:
$("#sub").click(function(){
// 陷入了难题,我该怎么把文件提交给后台啊???你想着直接把form表单提交过去行不行
var form = document.getElementById("uploadFile");
// 然后你兴奋的写着ajax请求
$.ajax({
type : "POST",
url : "xxxx.xxxx",
data : form,
success : function(result){
// 楼主此时想着拿到上传完后的文件URL
if(result.code == 200){
// 4.把URL显示在input中
????为什么要显示在input中????
没办法楼主这么说的,然后我私自改成了img
var filePath = result.data.filePath;
}else{
alert("文件上传失败");
}
},
error : function(){
alert("网络异常");
}
});
});
我的代码怎么落下了
<input type="button" id="sub" value="上传文件" />