plupload怎么设置属性_plupload上传插件在SpringMVC中的调整

plupload上传插件在SpringMVC中的整合

插件地址: http://www.plupload.com/

http://blog.csdn.net/t894690230/article/details/37956277

上传对象

package cn.com.voge.system.domain;

/**

* 项目名称: wp_idea_linux

* 功能说明:

* 创建者: Pandy,

* 邮箱: panyongzheng@163.com, 1453261799@qq.com

* 版权:

* 官网:

* 创建日期: 15-6-2.

* 创建时间: 下午1:31.

* 修改历史:

* -----------------------------------------------

*/

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;

/**

* Plupload是一个上传插件。

* 这是一个bean类,主要存储Plupload插件上传时需要的参数。

* 属性名不可随意改动.

* 这里主要使用MultipartFile文件上传方法

*/

public class Plupload {

/**文件临时名(打文件被分解时)或原名*/

private String name;

/**总的块数*/

private int chunks = -1;

/**当前块数(从0开始计数)*/

private int chunk = -1;

/**HttpServletRequest对象,不能直接传入进来,需要手动传入*/

private HttpServletRequest request;

/**保存文件上传信息,不能直接传入进来,需要手动传入*/

private MultipartFile multipartFile;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getChunks() {

return chunks;

}

public void setChunks(int chunks) {

this.chunks = chunks;

}

public int getChunk() {

return chunk;

}

public void setChunk(int chunk) {

this.chunk = chunk;

}

public HttpServletRequest getRequest() {

return request;

}

public void setRequest(HttpServletRequest request) {

this.request = request;

}

public MultipartFile getMultipartFile() {

return multipartFile;

}

public void setMultipartFile(MultipartFile multipartFile) {

this.multipartFile = multipartFile;

}

}

上传工具类

package cn.com.voge.system.domain;

/**

* 项目名称: wp_idea_linux

* 功能说明:

* 创建者: Pandy,

* 邮箱: panyongzheng@163.com, 1453261799@qq.com

* 版权:

* 官网:

* 创建日期: 15-6-2.

* 创建时间: 下午1:30.

* 修改历史:

* -----------------------------------------------

*/

import org.springframework.util.MultiValueMap;

import org.springframework.web.multipart.MultipartFile;

import org.springframework.web.multipart.MultipartHttpServletRequest;

import java.io.*;

import java.util.Iterator;

import java.util.List;

/**

* Plupload是一个上传插件。

* 上传原理为单个文件依次发送至服务器.

* 上传打文件时可以将其碎片化上传。但是一般情况下,不会这样做,

* 所以这里更多的是处理普通文件的批量上传。

* 这里主要处理文件上传

*/

public class PluploadUtil {

private static final int BUF_SIZE = 2 * 1024;

/**上传失败响应的成功状态码*/

public static final String RESP_SUCCESS = "{\"jsonrpc\" : \"2.0\", \"result\" : \"success\", \"id\" : \"id\"}";

/**上传失败响应的失败状态码*/

public static final String RESP_ERROR = "{\"jsonrpc\" : \"2.0\", \"error\" : {\"code\": 101, \"message\": \"Failed to open input stream.\"}, \"id\" : \"id\"}";

/**

* 用于Plupload插件的文件上传,自动生成唯一的文件保存名

* @param plupload - 存放上传所需参数的bean

* @param dir - 保存目标文件目录

* @throws IllegalStateException

* @throws IOException

*/

public static void upload(Plupload plupload, File dir) throws IllegalStateException, IOException {

//生成唯一的文件名

String filename = "" + System.currentTimeMillis() + plupload.getName();

upload(plupload, dir, filename);

}

/**

* 用于Plupload插件的文件上传

* @param plupload - 存放上传所需参数的bean

* @param dir - 保存目标文件目录

* @param filename - 保存的文件名

* @throws IllegalStateException

* @throws IOException

*/

public static void upload(Plupload plupload, File dir, String filename) throws IllegalStateException, IOException {

int chunks = plupload.getChunks(); //获取总的碎片数

int chunk = plupload.getChunk(); //获取当前碎片(从0开始计数)

System.out.println(plupload.getMultipartFile() + "----------");

MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) plupload.getRequest();

MultiValueMap map = multipartRequest.getMultiFileMap();

if(map != null) {

if (!dir.exists()) dir.mkdirs(); //如果目标文件夹不存在则创建新的文件夹

//事实上迭代器中只存在一个值,所以只需要返回一个值即可

Iterator iter = map.keySet().iterator();

while(iter.hasNext()) {

String str = (String) iter.next();

List fileList = map.get(str);

for(MultipartFile multipartFile : fileList) {

//因为只存在一个值,所以最后返回的既是第一个也是最后一个值

plupload.setMultipartFile(multipartFile);

//创建新目标文件

File targetFile = new File(dir.getPath()+ "/" + filename);

//当chunks>1则说明当前传的文件为一块碎片,需要合并

if (chunks > 1) {

//需要创建临时文件名,最后再更改名称

File tempFile = new File(dir.getPath()+ "/" + multipartFile.getName());

//如果chunk==0,则代表第一块碎片,不需要合并

saveUploadFile(multipartFile.getInputStream(), tempFile, chunk == 0 ? false : true);

//上传并合并完成,则将临时名称更改为指定名称

if (chunks - chunk == 1) {

tempFile.renameTo(targetFile);

}

} else {

//否则直接将文件内容拷贝至新文件

multipartFile.transferTo(targetFile);

}

}

}

}

}

/**

* 保存上传文件,兼合并功能

*/

private static void saveUploadFile(InputStream input, File targetFile, boolean append) throws IOException {

OutputStream out = null;

try {

if (targetFile.exists() && append) {

out = new BufferedOutputStream(new FileOutputStream(targetFile, true), BUF_SIZE);

} else {

out = new BufferedOutputStream(new FileOutputStream(targetFile), BUF_SIZE);

}

byte[] buffer = new byte[BUF_SIZE];

int len = 0;

//写入文件

while ((len = input.read(buffer)) > 0) {

out.write(buffer, 0, len);

}

} catch (IOException e) {

throw e;

} finally {

//关闭输入输出流

if (null != input) {

try {

input.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (null != out) {

try {

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

/**

* 判断是否全部上传完成

* 碎片需合并后才返回真

*/

public static boolean isUploadFinish(Plupload plupload) {

return (plupload.getChunks() - plupload.getChunk() == 1);

}

}

controller

@ResponseBody

@RequestMapping(value = "/u", method = RequestMethod.POST)

public String upload(Plupload plupload,HttpServletRequest request, HttpServletResponse response) {

String FileDir = "uploadfile/";

plupload.setRequest(request);

//文件存储路径

File dir = new File(plupload.getRequest().getSession().getServletContext().getRealPath("/") + FileDir);

System.out.println(dir.getPath());

try {

//上传文件

PluploadUtil.upload(plupload, dir);

//判断文件是否上传成功(被分成块的文件是否全部上传完成)

if (PluploadUtil.isUploadFinish(plupload)) {

System.out.println(plupload.getName() + "----");

}

} catch (IllegalStateException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return "login.upload";

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
plupload是一个基于HTML5和Flash技术的开源文件上传组件,它不仅可以用于上传文件,还可以用于下载文件。 使用plupload进行下载,首先需要构建一个下载按钮,并为其绑定点击事件。当用户点击下载按钮时,可以通过调用plupload的API方法,向服务器发送下载请求。服务器收到下载请求后,可以将对应的文件发送给客户端进行下载。 在plupload,可以使用settings对象的url属性来指定下载的服务器地址。可以自定义一个下载接口,当plupload发送下载请求时,该接口负责根据请求的参数,获取文件的路径,读取文件内容,并发送给客户端进行下载。 例如,构建一个下载按钮的示例代码如下: ```html <button id="downloadBtn">下载文件</button> <script src="plupload.js"></script> <script> // 绑定下载按钮点击事件 document.getElementById('downloadBtn').addEventListener('click', function() { // 使用plupload的API方法发送下载请求 plupload.addFile({ name: 'filename.ext', // 文件名 url: 'download.php' // 下载接口地址 }); }); </script> ``` 在download.php文件,可以获取到plupload发送的下载请求,根据请求的参数,读取对应的文件,并将文件内容发送给客户端。下载文件的代码如下: ```php <?php $filename = $_GET['filename']; // 获取下载文件名 // 设置响应头信息,告诉浏览器下载文件 header('Content-Disposition: attachment; filename='.$filename); header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('Content-Length: '. filesize($filename)); // 输出文件内容 readfile($filename); ?> ``` 以上就是使用plupload进行文件下载的简单示例。当用户点击下载按钮时,plupload将发送下载请求到download.php接口,该接口会读取文件内容并发送给客户端,实现文件下载功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值