文件上传
一、文件上传的基本操作:
1、 表单属性enctype的设置
multipart/form-data和application/x-www-form-urlencoded的区别
FORM元素的enctype属性指定了表单数据向服务器提交时所采用的编码类型,默认的缺省值是“application/x-www-form-urlencoded”。
然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。
在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上载。
Browser端<form>表单的ENCTYPE属性值为multipart/form-data,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,<input>的type属性必须是file。
2、实现过程
1、个文件a.txt b.txt
a.txt 内容:aaa
b.txt内容:bbb
2、upload.jsp
3、UploadServlet
打印结果为
null
-----------------------------7db109f106b4
Content-Disposition: form-data; name="username"
ccc
-----------------------------7db109f106b4
Content-Disposition: form-data; name="file1"; filename="C:\Documents and Settings\Administrator\妗岄潰\a.txt"
Content-Type: text/plain
aaaaaa
aaaaaaaaa
-----------------------------7db109f106b4
Content-Disposition: form-data; name="file2"; filename="C:\Documents and Settings\Administrator\妗岄潰\b.txt"
Content-Type: text/plain
bbbbbbbbbbb
-----------------------------7db109f106b4--
因此,上传文件只需解析Content-Type:text/plain然后保存内容即可
二、commoms FilesUpload
upload.jsp
UploadServlet
三、上传文件中应注意的细节
解决中文乱码问题
1、 上传中文文件的乱码问题
ServletFileUpload中的setHeaderEncoding()
public void setHeaderEncoding(Stringencoding)
Specifies the character encoding to be used when readingthe headers of individual part. When not specified, ornull
, the request encoding is used. If that is alsonot specified, ornull
, theplatform default encoding is used.
Parameters:
encoding
- The encoding used to read part headers.
upload.setHeaderEncoding("utf-8");
2、上传的普通输入项的乱码
l手工转码
用户名的乱码问题
paramValue= newString(paramValue.getBytes("iso8859-1"),"utf-8");
l利用FileItem类的getString(String encoding)
String getString(Stringencoding)
throwsUnsupportedEncoding Exception
Returnsthe contents of the file item as a String, using the specified encoding. Thismethod uses get()to retrieve the contents of the item.
解决没有指定文件名的问题
判断获取的文件名是否为空
临时文件的删除问题
FileItem
voiddelete()
Deletesthe underlying storage for a file item, including deleting any associatedtemporary disk file. Although this storage will be deleted automatically whenthe FileItem instance is garbage collected, this method can be used to ensurethat this
is done at an earlier time, thus preserving system resources.
保存路径问题
如表示url资源时应该用斜杠 “/”
如表示硬盘路径时用斜杠“\\”
为保证服务器安全,上传的文件应禁止用户直接访问,通常保存在应用程序的WEB-INF目录下,或者不受WEB服务器管理的目录
演示
如文件上传路径在web发布目录下
1)编写destory.jsp内容如下
3)运行此文件,将可能导致服务器的关闭2)上传此文件
为防止多用户上传相同文件名的文件,而导致文件覆盖的情况发生,文件上传程序应保证上传文件具有唯一文件名。
用UUID即可:return UUID.randomUUID().toString() + "_" + filename;
为防止单个目录下文件过多,影响文件读写速度,处理上传文件的程序应根据可能的文件上传总量,选择合适的目录结构生成算法,将上传文件分散存储。如利用日期等方式分布目录。
哈希目录:
利用文件名的哈希值算出二级目录。
具体做法是,取得文件名的哈希值的第四位作为一级目录(目录取值为0-15),5-8位作为二级目录(目录取值为0-15),如此能得到16个一级目录,每一个一级目录下可以有16个二级目录。
所有的文件随机分散在16*16的二级目录中,这样即使有人在短时间内上传了海量的文件,也不至于让所有的文件都存入某一个目录中
另外,也不用担心文件太过分散不易查找,因为下载时只需根据用户提供的文件名在此进行哈希运算就可以重新确定该文件的存储目录。
分享到:
相关推荐
该代码完整的实现了shiyonglayui技术实现多文件的上传预览和删除功能,下载下来直接导入到开发工具中就可以使用
element-ui+vue单文件上传和 多文件批量上传(多文件走一次接口)
基于SpringBoot的文件上传系统,前后端分离,单文件上传,多文件上传,大文件上传,断点续传,文件秒传,图片上传 项目经过严格测试,确保可以运行! 采用前后端分离的方式进行开发,实现了几种常用的文件上传功能...
之前发布一个大文件上传,但是问题太多,此版本相对上一个稳定得多 1,将压缩包里的 php_uploadprogress.dll 文件复制到你的PHP 安装目录里的扩展库文件夹 就是 ext文件夹下面 2,在你的服务器上随便一个地方(最好...
springMvc 文件上传,springMvc 支持单文件和多文件上传,
一个简单的文件上传管理功能 一个简单的文件上传管理功能 一个简单的文件上传管理功能 一个简单的文件上传管理功能 一个简单的文件上传管理功能 一个简单的文件上传管理功能 一个简单的文件上传管理功能 一个简单的...
一个简单地文件管理系统,实现了文件的上传、下载、移动等功能,支持大部分类型文件的预览,支持视频浏览,音乐播放等。。。一个个人文件管理系统的源码脚手架,r-pan基于此脚手架搭建,版本更新内容(更换了前端...
js 实现 上传文件一次完成! 值得下载看看!资源免费,大家分享!!
利用java图形化界面和网络编程相结合实现的--文件上传。 运行步骤: (1)分别运行工程两个包中的两个.java文件(UploadClient.java和UploadServer.java)分别会弹出“上传客服端”和“上传服务器”两个窗口。 ...
文件上传一直是B/S结构中很重要的一项功能,在java中并没有很好的实现文件上传的类包,因此出现了一些开源的组件,Smartupload ,commons-fileupload,还有国内的一个"牛人"的(不好意思叫不上名字来),这几个组件中...
上传下载一个JSP上传图片和文件实例 上传下载一个JSP上传图片和文件实例
PHP文件上传类,自定义配置,包括单文件和多文件上传(检测文件大小,文件格式,文件重命名,错误返回,全部封装在一个类中)
项目需求是多个文件上传,在一次请求中完成,而ElementUI的上传组件是每个文件发一次上传请求,因此我们借助FormData的格式向后台传文件组 html代码 <div class="upload-file"> accept=".xlsx" ref="upload...
将文件上传到 /admin/product.aspx 所有文件上传结束后弹出窗口"上传完毕" 就这样填参数 FlashVars="url=/admin/product.aspx&handler=alert('上传完毕')" (然后在product.aspx获取post第一个文件即可) ========...
文件上传工具类,上传文件,上传导入文件到path文件夹下,判断图片大小是否超过要求,上传多张图片到服务器,上传图片到服务器,上传文件(在指定目录下创建年月日目录),上传导入文件到temp文件夹下,删除指定...
分享给大家供大家参考,具体如下: PHP使用CURL上传文件只需发送一个POST请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以”@”开头,然后使用CURL把...为了把这个文件上传给服务端的脚本http://you
一次可上传两个文件,选择文件路径,填写描述,然后单击“上传文件”按钮,即可将文件上传到程序路径下的files文件夹中。 图1.2 文件上传页面 单击“下载文件”按钮,进入文件下载页面,如图1.3所示。单击文件后的...
3、支持大文件上传, 一次可以上传多个文件. 上传时有详细的状态显示(包括单个文件进度,整体进度,传输速率,剩余时间等) 4、提供接口全面. 可以动态设置上传保存路径, 设置允许扩展名, 允许最大大小等 5、支持...
Bootstrap文件上传插件File Input是一个不错的文件上传控件,但是搜索使用到的案例不多,经过一番研究,把案例整理出来,供大家学习
利用flash上传工具,结合jsp来进行多文件上传demo。 能一次性的选择多个文件,有上传进度显示;java项目