java文件上传原理
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于java文件上传原理内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在java文件上传原理相关知识领域提供全面立体的资料补充。同时还包含 j2ee是什么、jar格式、java 的知识内容,欢迎查阅!
java文件上传原理相关知识
-
补习系列(11)-springboot 文件上传原理一、文件上传原理 一个文件上传的过程如下图所示: 浏览器发起HTTP POST请求,指定请求头: Content-Type: multipart/form-data 服务端解析请求内容,执行文件保存处理,返回成功消息。 RFC1867 定义了HTML表单文件上传的处理机制。 通常一个文件上传的请求内容格式如下: POST /upload HTTP/1.1 Host:xxx.org Content-type: multipart/form-data, boundary="boundaryStr" --boundaryStr content-disposition: form-data; name="name" Name Of Picture --boundaryStr C
-
补习系列(11)-springboot 文件上传原理一、文件上传原理一个文件上传的过程如下图所示:image浏览器发起HTTP POST请求,指定请求头:Content-Type: multipart/form-data服务端解析请求内容,执行文件保存处理,返回成功消息。RFC1867 定义了HTML表单文件上传的处理机制。通常一个文件上传的请求内容格式如下:POST /upload HTTP/1.1 Host:xxx.org Content-type: multipart/form-data, boundary="boundaryStr"--boundaryStr content-disposition: form-data; name="name"Name Of Picture --boundaryStr Content-disposition: attachment; name="p
-
Java 文件上传下载管理器(控制台)文件上传下载管理器 项目技术 JDBC + IO + Socket 实现功能 客户端注册:通过输入用户名,密码,确认密码并且校验完成以后将用户信息储存在数据库中。 客户端登录:通过输入用户名和密码到数据库中校验,校验完成进入文件上传下载管理器。 上传文件:通过输入上传文件的路径上传到数据库,支持多个文件上传。 查看文件:通过登录的用户名查找上传的文件。 下载文件:通过输入文件的编号和下载的路径,从数据库进行下载。 删除文件:通过输入文件的编号进行单个文件的删除。 (ps:
-
Feign上传文件今天给大家介绍下在Feign中如何调用文件上传接口,进行文件上传操作。这边文章讲的Feign不是Spring Cloud Feign,是原始Feign的使用。在一些比较老的,不是Spring Cloud的项目中,我们也可以用Feign来进行接口的调用。使用Feign来上传文件,首先你得有一个上传文件的接口,我们假设上传地址如下:POST http://localhost:8080/file/upload参数的话就一个file,一个二进制文件。在项目中增加Feign的依赖,除了核心模块还有jackson,最重要的就是form模块的依赖,否则无法上传文件。<dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-core</artifactId>
java文件上传原理相关课程
-
iOS之FTP上传 本课程会着重给大家讲解FTP的上传机制,从文档介绍,并且会通过上传头像的案例,帮助大家完成相册的获取、ftp上传路径的获取以及具体的操作流程。
讲师:爬梯 初级 4085人正在学习
java文件上传原理相关教程
- 4.1 上传文件 <html><head><meta charset="UTF-8"><title>文件上传</title></head><body><h2>上传文件</h2><form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" class="input"> <input type="submit" value="上传" class="input button"></form>定义上传文件表单 form,使用 POST 方法提交给服务端 /upload 页面处理,属性 enctype=“multipart/form-data” 表示表单中包含有上传文件的数据需要处理。
- 1. Django 的文件上传实验 同样,话不多说,我们先通过两个上传的例子来看看 Django 的上传功能。实验1:简单文件上传准备本地文件,upload.txt,上传到服务器的 /root/test/django 目录下;准备模板文件,显示上传按钮:<form method="post" action="/hello/file_upload/" enctype="multipart/form-data"> {% csrf_token %} {{ forms }}<br> <input type="submit" value="提交"></form>完成 Form 表单以及视图函数的编写:class FileUploadForm(forms.Form): file = forms.FileField(label="文件上传")def handle_uploaded_file(f): save_path = os.path.join('/root/test/django', f.name) with open(save_path, 'wb+') as fp: for chunk in f.chunks(): fp.write(chunk)@csrf_exemptdef file_upload(request, *args, **kwargs): error_msg = "" if request.method == 'POST': forms = FileUploadForm(request.POST,request.FILES) if forms.is_valid(): handle_uploaded_file(request.FILES['file']) return HttpResponse('上传成功') error_msg = "异常" else: forms = FileUploadForm() return render(request,'test_file_upload.html',{'forms':forms, "error_msg": error_msg})编写 URLConf 配置:urlpatterns = [ # ... # 文件上传测试 path('file_upload/', views.file_upload)]只需要这样几步,一个简单的文件上传就完成了。接下来启动服务进行测试,参考如下的操作:17实验2:使用模型(model) 处理上传的文件第一步,先设置 settings.py 中的 MEDIA_ROOT,这个设置上传文件保存的根目录;# first_django_app/settings.py# ...MEDIA_ROOT = '/root/test/'# ...第二步,准备文件上传模型类# hello_app/models.py# ...class FileModel(models.Model): name = models.CharField('上传文件名', max_length=20) upload_file = models.FileField(upload_to='django')注意:这个 upload_to 参数和 settings.py 中的 MEDIA_ROOT 属性值一起确定文件上传的目录。它可以有很多种形式,比如写成upload_to='django/%Y/%m/%d' 这样的。此外,该参数可以接收方法名,该方法返回的是上传文件的目录。第三步,我们必须要生成这个对应的表,使用如下命令:(django-manual) [root@server first_django_app]# python manage.py makemigrations hello_app(django-manual) [root@server first_django_app]# python manage.py migrate hello_app执行完成这两步之后,在数据库里面,我们就生成了相应的表。默认的表面是[应用名_模型类名小写],即hello_app__filemodel。第三步, 准备相应的视图函数;# hello_app/views.py# ... def file_upload2(request, *args, **kwargs): if request.method == 'POST': upload_file = request.FILES['upload_file'] FileModel.objects.create(name=upload_file.name, upload_file=upload_file) return HttpResponse('上传成功') return render(request,'test_file_upload2.html',{})# ...(django-manual) [root@server first_django_app]# cat templates/test_file_upload2.html {% load staticfiles %}<form method="post" action="/hello/file_upload2/" enctype="multipart/form-data"> {% csrf_token %} <label>选择上传文件:</label><input type="file" name="file"> <div><input type="submit" value="提交" style="margin-top:10px"></div></form>注意:这里和之前保存文件方式略有不同,直接使用对应模型实例的保存数据方法即可,文件将会自动上传到指定目录下且会在数据库中添加一条记录。编写对应的 URLconf 配置,如下:# hello_app/urls.py# ...urlpatterns = [ # ... # 文件上传测试 path('file_upload2/', views.file_upload2)]接下来,就是常规的启动服务,然后页面上测试。参考如下:18实验3:多文件上传实验实现一次上传多个文件也比较简单,我们只需要改动前端的一行代码,就可以支持一次性上传多个文件。改动前端代码如下:<!--原来的语句 <label>选择上传文件:</label><input type="file" name="file"> --><label>选择上传文件:</label><input type="file" name="files" multiple="">接下来,简单调整下视图函数:def file_upload2(request, *args, **kwargs): if request.method == 'POST': # 获取文件列表 upload_files = request.FILES.getlist('files') # 遍历文件并保存 for f in upload_files: FileModel.objects.create(name=f.name, upload_file=f) return HttpResponse('上传成功') return render(request,'test_file_upload2.html',{})最后看我们的启动服务和测试接口过程如下:19
- 2.1 配置文件上传组件 打开项目中的 WebConfig 文件,添加如下代码:@Beanpublic MultipartResolver multipartResolver() { return new StandardServletMultipartResolver();}MultipartResolver 是一个接口,约定了文件上传的方法。StandardServletMultipartResolver 是具体的实现类,用来完成文件上传。对上传的文件信息进一步进行配置,如限制文件大小、文件类型等。打开 WebInitializer 文件,重写 customizeRegistration() 方法:@Overrideprotected void customizeRegistration(Dynamic registration) { registration.setMultipartConfig(new MultipartConfigElement(null,2000000,400000,0));}MultipartConfigElement()方法可以接收 3 个参数:第一个参数指定保存上传文件的临时目录。如果指定 null,由 Spring MVC 自己提供;最好不要指定;第二个参数,文件上传的最小大小限制;第三个参数,文件上传的最大尺寸限制。
- 5.定义文件上传处理方法 /** * 文件上传接收 * @return \think\response\Json */ public function upload(){ //接收文件 $file = request()->file('file'); halt($file); //将文件上传到服务器文件目录 $filename = Filesystem::putFile('study',$file); return json("保存成功"); }文件上传界面如下:如下图所示,是上传之后的文件:Tips: 文件上传之后的文件名是经过编码之后的名称,一般具有唯一性,目的是为了防止重名文件被覆盖的问题。
- 上传文件 最后看一看 requests 库中如何上传文件:>>> url = 'https://httpbin.org/post'>>> files = {'file': open('/home/store/shen/start.sh', 'rb')}>>> r = requests.post(url, files=files)>>> r.text'{\n "args": {}, \n "data": "", \n "files": {\n "file": "#!/bin/bash\\n########################################################\\n# author: spyinx (https://blog.csdn.net/qq_40085317) #\\n# email: 2894577759@qq.com #\\n# date: 2020/6/24 #\\n# function: start agent server on CentOS 7.7 #\\n########################################################\\nAGENT_PORT=8765\\n\\n# check the agent process first\\nmain_pid=$(pstree -ap|grep gunicorn|grep -v grep|awk \'NR==1{print}\'|grep -o \\"[0-9]*\\"|awk \'NR==1{print}\')\\nif [ -n \\"$main_pid\\" ]; then\\n echo \\"get the agent server\'s main pid: $main_pid\\"\\n sudo kill -9 $main_pid\\n echo \\"stop the server first\\"\\n sleep 15\\n process_num=$(ps -ef|grep gunicorn|grep -v grep|wc -l)\\n if [ $process_num -ne 0 ]; then\\n echo \\"close agent server failed\\uff0cexit!\\"\\n exit 1\\n fi\\nfi\\n\\n# start agent server\\nmaster_addr=$(cat /etc/hosts | grep `hostname` | awk \'{print $1}\')\\necho \\"start agent server\\"\\ngunicorn -w 4 -b $master_addr:$AGENT_PORT xstore_agent.agent:app --daemon\\nsleep 5\\nprocess_num=$(ps -ef|grep gunicorn|grep -v grep|wc -l)\\nif [ $process_num -eq 0 ]; then\\n echo \\"start agent server failed\\uff0cplease check it!\\"\\n exit 2\\nfi\\necho \\"start agent server success\\uff0cok!\\""\n }, \n "form": {}, \n "headers": {\n "Accept": "*/*", \n "Accept-Encoding": "gzip, deflate", \n "Content-Length": "1356", \n "Content-Type": "multipart/form-data; boundary=565e2040b1d37bad527477863e64ba6c", \n "Host": "httpbin.org", \n "User-Agent": "python-requests/2.24.0", \n "X-Amzn-Trace-Id": "Root=1-5ef49e5f-a02b3e64f58fe4a3ff51fa94"\n }, \n "json": null, \n "origin": "47.115.61.209", \n "url": "https://httpbin.org/post"\n}\n'>>>在 requests 库中,只需要将上传文件参数传递给 post() 方法即可,是不是非常简单?另外,我们还可以在请求中添加 cookie 或者在相应中获取相应的 cookie 信息。另外,我们还可以使用 requests 的 Session 来维持会话,这在有登录需求的网站获取数据时会非常有用:# 创建一个session对象,用来存储session信息>>> s = requests.session() >>> s.get("http://www.baidu.com") 如果在登录之后,继续使用 session 对象再请求该网站的其他页面的 url,就会带着 session 信息去与该网站进行交互,模拟登录后的访问。
- Django 的文件上传 在学习完 Django 的 Form 模块后,我们就用最后一个常用的文件上传的场景来结束本部分的内容。
java文件上传原理相关搜索
-
j2ee
j2ee是什么
jar格式
java
java api
java applet
java c
java jdk
java list
java map
java script
java se
java socket
java swing
java switch
java web
java xml
java 程序设计
java 多线程
java 环境变量