java web断点续传,我用的是fileupload来做的上传。 15

现在上传和进度条已经实现的,就是断点续传和。和断点进度条要如何实现我一点头绪也没有,求高手指点!!!我用的上传jar是Commons-fileupload和Commons... 现在上传和进度条已经实现的,就是断点续传和。和断点进度条要如何实现我一点头绪也没有,求高手指点!!!
我用的上传jar是Commons-fileupload和Commons-io
form 提交的<input type="file">数据在后台要如何获取上传文件的名字?
展开
 我来答
匿名用户
推荐于2018-01-09
展开全部

使用Struts2上传文件:

Struts文件上传需要使用File Upload Filter。Filter Upload Filter使用一些默认的规则:

Form中的<s:file name="image"></s:file>标签对应着Action类中的三个属性分别是:上传文件(java.io.File类型),文件名(java.lang.String类型),文件类型(java.lang.String类型,例如:image/jpeg)。命名规约为:

文件:名字与<s:file>标签中的name属性一致,这里为:image

文件名:文件 + FileName,这里为:imageFileName

文件类型:文件 + ContentType,这里为:imageContentType

所以针对上述<s:file name="image"></s:file>表示啊的上传文件的JSP和Action类被别为:

imageUpload.jsp:

[html] view plain copy

  • <%@ page contentType="text/html;charset=UTF-8" language="java" %>  

  • <%@taglib prefix="s" uri="/struts-tags" %>  

  • <html>  

  • <head><title>Image Upload</title></head>  

  • <body>  

  • <h1> Image Upload Page </h1>  

  • <s:form action="imageUpload" method="post" enctype="multipart/form-data">  

  • <s:file name="image"></s:file>  

  • <s:submit></s:submit>  

  • </s:form>  

  • </body>  

  • </html>  



  • ImageUploadAction.java:

    [html] view plain copy

  • package com.jpleasure;  

  • import com.opensymphony.xwork2.ActionSupport;  

  • import java.io.File;  

  • import java.io.InputStream;  

  • import java.io.FileInputStream;  

  • import java.io.FileNotFoundException;  

  • public class ImageUploadAction extends ActionSupport {  

  • private File image;  

  • private String imageFileName;  

  • private String imageContentType;  

  • public File getImage() {  

  • return image;  

  • }  

  • public void setImage(File image) {  

  • this.image = image;  

  • }  

  • public String getImageFileName() {  

  • return imageFileName;  

  • }  

  • public void setImageFileName(String imageFileName) {  

  • this.imageFileName = imageFileName;  

  • }  

  • public String getImageContentType() {  

  • return imageContentType;  

  • }  

  • public void setImageContentType(String imageContentType) {  

  • this.imageContentType = imageContentType;  

  • }  

  • public String execute() {  

  • if (image != null) {  

  • System.out.println("file name is:" + this.imageFileName);  

  • System.out.println("file content type is:" + this.imageContentType);  

  • System.out.println("file length is:" + this.image.length());  

  • }  

  • return SUCCESS;  

  • }  

  • }  



  • Struts.xml配置文件:

    [html] view plain copy

  • <action name="imageUpload" class="com.jpleasure.ImageUploadAction">  

  • <result>/success.jsp</result>  

  • </action>  

  • 这样当我们选中上传文件,提交的时候:文件内容会以File类型的方式放在image声明的变量中。文件的名字将会被放在imageFileName命名的变量中,文件的类型被放在imageContentType命名的变量中。

    文件下载:

    文件下载需要使用一个特殊的Result,stream类型的Result。Stream类型的Result主要用来处理文件下载操作。

    处理原理为:所有的下载文件都是将一个二进制的流写入到HttpResponse中去。在Action类中定义一个InputSream类型的二进制流,在Result返回给用户的时候返回给用户。

    扩展上述的代码,将上传来的文件直接下载给用户:

    ImageUploadAction中需要追加一个InputSream类型的对象,并且指向上传的文件,代码如下,红色部分表示变化:

    [html] view plain copy

  • package com.jpleasure;  

  • import com.opensymphony.xwork2.ActionSupport;  

  • import java.io.File;  

  • import java.io.InputStream;  

  • import java.io.FileInputStream;  

  • import java.io.FileNotFoundException;  

  • public class ImageUploadAction extends ActionSupport {  

  • private File image;  

  • private String imageFileName;  

  • private String imageContentType;  

  • private InputStream imageInputStream = null;  

  • public InputStream getImageInputStream() {  

  • return imageInputStream;  

  • }  

  • public void setImageInputStream(InputStream imageInputStream) {  

  • this.imageInputStream = imageInputStream;  

  • }  

  • public File getImage() {  

  • return image;  

  • }  

  • public void setImage(File image) {  

  • this.image = image;  

  • }  

  • public String getImageFileName() {  

  • return imageFileName;  

  • }  

  • public void setImageFileName(String imageFileName) {  

  • this.imageFileName = imageFileName;  

  • }  

  • public String getImageContentType() {  

  • return imageContentType;  

  • }  

  • public void setImageContentType(String imageContentType) {  

  • this.imageContentType = imageContentType;  

  • }  

  • public String execute() {  

  • if (image != null) {  

  • System.out.println("file name is:" + this.imageFileName);  

  • System.out.println("file content type is:" + this.imageContentType);  

  • System.out.println("file length is:" + this.image.length());  

  • try {  

  • this.imageInputStream = new FileInputStream (image);  

  • } catch (FileNotFoundException e) {  

  • e.printStackTrace();            

  • }  

  • }  

  • return SUCCESS;  

  • }  

  • }  



  • 配置文件为,红色为变化部分:

    [html] view plain copy

  • <action name="imageUpload" class="com.jpleasure.ImageUploadAction">  

  • <result name="success" type="stream">  

  • <param name="contentType">image/pjpeg</param>  

  • <param name="inputName">imageInputStream</param>  

  • <param name="contentDisposition">attachment;filename="image.jpg"</param>  

  • <param name="bufferSize">1024</param>  

  • </result>  

  • </action>  



  • ContentType表示下载文件的类型。

    InputName表示Action类中用来下载文件的字段的名字。

    ContentDisposition用来控制文件下载的一些信息,包括是否打开另存对话框,下载文件名等。

    BufferSize表示文件下载时使用的缓冲区的大小。

    实际项目开发的考虑:

    控制上传文件的类型和最大允许上传文件的size

    使用File Upload Intercepter的参数可盈控制上传文件的类型和最大允许上传文件的size。例如:

    [html] view plain copy

  • <struts>  

  • <package name="myPackage" extends="struts-default">  

  • <interceptor-ref name="fileUpload">  

  • <param name="maximumSize">2MB</param>  

  • <param name="allowedTypes">text/html,image/jpeg</param>  

  • </interceptor-ref>  

  • <interceptor-ref name="basicStack"/>  

  • <action name="imageUpload" class="com.jpleasure.ImageUploadAction">  

  • <result name="success" type="stream">  

  • <param name="contentType">image/pjpeg</param>  

  • <param name="inputName">imageInputStream</param>  

  • <param name="contentDisposition">  

  • attachment;filename="image.jpg"  

  • </param>  

  • <param name="bufferSize">1024</param>  

  • </result>  

  • </action>  

  • </package>  

  • </struts>  



  • 上述表示允许上传jpeg和html类型的文件,且最大文件上传size为2MB

    显示错误信息:

    可以使用如下key表示的message来显示文件上传出错的提示信息:

    消息Key    说明    

    struts.messages.error.uploading    文件无法正常上传时的公共错误    

    struts.messages.error.file.too.large    文件大小超过最大允许size时的错误提示    

    struts.messages.error.content.type.not.allowed    文件类型不在上传文件允许类型中的错误提示    

暮无雪
2017-09-02 · TA获得超过172个赞
知道答主
回答量:76
采纳率:0%
帮助的人:22.6万
展开全部
加我企鹅发百#度#云#教程,1-6-8- 9-1-5 2-8-2-4,百度牛逼的文件上传组件,webuploader,拖拽,粘贴,断点续传
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
秀秀90
2018-01-08 · TA获得超过135个赞
知道答主
回答量:124
采纳率:66%
帮助的人:15万
展开全部
MultipartHttpServletRequest mreq = (MultipartHttpServletRequest) req;
MultipartFile file = mreq.getFile("file");
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-09-03
展开全部
帮你找了一个, 没测试.可以试试
http://tech.ccidnet.com/art/3539/20071116/1277905_1.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
佳芮灬
2015-10-30 · TA获得超过5955个赞
知道大有可为答主
回答量:3066
采纳率:91%
帮助的人:778万
展开全部
JAVA WEB文件上传步骤如下:
实现 Web 开发中的文件上传功能,两个操作:在 Web 页面添加上传输入项,在 Servlet 中读取上传文件的数据并保存在本地硬盘中。
1、Web 端上传文件。在 Web 页面中添加上传输入项:<input type="file"> 设置文件上传输入项时应注意:(1) 必须设置 input 输入项的 name 属性,否则浏览器将不会发送上传文件的数据。(2) 必须把 form 的 enctype 属性设为 multipart/form-data,设置该值后,浏览器在上传文件时,将把文件数据附带在 http 请求消息体中,并使用 MIME 协议对上传文件进行描述,以方便接收方对上传数据进行解析和处理。(3) 表单提交的方式要是 post
2、服务器端获取文件。如果提交表单的类型为 multipart/form-data 时,就不能采用传统方式获取数据。因为当表单类型为 multipart/form-data 时,浏览器会将数据以 MIME 协议的形式进行描述。如果想在服务器端获取数据,那么我们必须采用获取请求消息输入流的方式来获取数据。
3、Apache-Commons-fileupload。为了方便用户处理上传数据,Apache 提供了一个用来处理表单文件上传的开源组建。使用 Commons-fileupload 需要 Commons-io 包的支持。
4、fileuplpad 组建工作流程
(1)客户端将数据封装在 request 对象中。
(2)服务器端获取到 request 对象。
(3)创建解析器工厂 DiskFileItemFactory 。
(4)创建解析器,将解析器工厂放入解析器构造函数中。之后解析器会对 request 进行解析。
(5)解析器会将每个表单项封装为各自对应的 FileItem。
(6)判断代表每个表单项的 FileItem 是否为普通表单项 isFormField,返回 true 为普通表单项。
(7)如果是普通表单项,通过 getFieldName 获取表单项名,getString 获得表单项值。
(8)如果 isFormField 返回 false 那么是用户要上传的数据,可以通过 getInputStream 获取上传文件的数据。通过getName 可以获取上传的文件名
追问
没有代码吗?我想要的是如何断点续传
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式