关于使用Springmvc的MultipartHttpServletRequest来获得表单上传文件的问题,万分感谢~

关于使用Springmvc的MultipartHttpServletRequest来获得表单上传文件的问题,万分感谢~,第1张

try {

//下面这句必须加,不然报错

MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext())

MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request

//获取一起跟文件传过来的其他参数值

String id = multipartRequest.getParameter("id")

//获取上传上来的文件

Map<String, MultipartFile>fileMap = multipartRequest.getFileMap()

for (Map.Entry<String, MultipartFile>entry : fileMap.entrySet()){

MultipartFile file = entry.getValue()

String fileName = file.getOriginalFilename()

System.out.println(fileName)

String path = "C:\\Users\\Administrator\\Desktop" + File.separator + fileName

file.transferTo(new File(path))

}

} catch (Exception e) {

e.printStackTrace()

}

测试struts应该不是用MockHttpServletRequest吧~~你要用的话,斗姿 HttpServletRequest在对开enctype=multipart-data的请求应该是request.getInputStream(),你要模拟的话,你模拟http请求中的这段inputStream。

MockHttpServeltRequest req = new MockHttpServeltRequest(){

public InputStream getInputStream(){

... 这里覆盖些陪销友方法

}

}

然后你测试要确保不对环境有依赖。如果是用芦槐strutsSpringTestCase,最后判断是否上传成功的标示在Action中的那个File文件是否存在,大小跟预期是否相同。

上洞咐衫传:

需要导入两个包:commons-fileupload-1.2.1.jar,commons-io-1.4.jar

import java.io.File

import java.io.IOException

import java.util.List

import javax.servlet.ServletException

import javax.servlet.http.HttpServlet

import javax.servlet.http.HttpServletRequest

import javax.servlet.http.HttpServletResponse

import org.apache.commons.fileupload.FileItem

import org.apache.commons.fileupload.disk.DiskFileItemFactory

import org.apache.commons.fileupload.servlet.ServletFileUpload

/**

* 上传附件

* @author new

*

*/

public class UploadAnnexServlet extends HttpServlet {

private static String path = ""

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doPost(request, response)

}

/*

* post处理

* (non-Javadoc)

* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)

*/

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

path = this.getServletContext().getRealPath("简羡/upload")

try {

DiskFileItemFactory factory = new DiskFileItemFactory()

ServletFileUpload up = new ServletFileUpload(factory)

List<FileItem>ls = up.parseRequest(request)

for (FileItem fileItem : ls) {

if (fileItem.isFormField()) {

String FieldName = fileItem.getFieldName()

//getName()返回的是文件名字 普通域没有文件 返回NULL

//String Name = fileItem.getName()

String Content = fileItem.getString("gbk")

request.setAttribute(FieldName, Content)

} else {

String nm = fileItem.getName().substring(

fileItem.getName().lastIndexOf("\\"纳腔) + 1)

File mkr = new File(path, nm)

if (mkr.createNewFile()) {

fileItem.write(mkr)//非常方便的方法

}

request.setAttribute("result", "上传文件成功!")

}

}

} catch (Exception e) {

e.printStackTrace()

request.setAttribute("result", "上传失败,请查找原因,重新再试!")

}

request.getRequestDispatcher("/pages/admin/annex-manager.jsp").forward(

request, response)

}

}

下载(i/o流)无需导包:

import java.io.IOException

import java.net.URLEncoder

import javax.servlet.ServletException

import javax.servlet.http.HttpServlet

import javax.servlet.http.HttpServletRequest

import javax.servlet.http.HttpServletResponse

/**

* 下载文件

* @author

*

*/

public class DownloadFilesServlet extends HttpServlet {

/**

*

*/

private static final long serialVersionUID = 8594448765428224944L

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doPost(request, response)

}

/*

* 处理请求

* (non-Javadoc)

* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)

*/

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String name = request.getParameter("fileName")

System.out.print("dddddddddd:" + name)

// web绝对路径

String path = request.getSession().getServletContext().getRealPath("/")

String savePath = path + "upload"

// 设置为下载application/x-download

response.setContentType("application/x-download")

// 即将下载的文件在服务器上的绝对路径

String filenamedownload = savePath + "/" + name

// 下载文件时显示的文件保存名称

String filenamedisplay = name

// 中文编码转换

filenamedisplay = URLEncoder.encode(filenamedisplay, "UTF-8")

response.addHeader("Content-Disposition", "attachmentfilename="

+ filenamedisplay)

try {

java.io.OutputStream os = response.getOutputStream()

java.io.FileInputStream fis = new java.io.FileInputStream(

filenamedownload)

byte[] b = new byte[1024]

int i = 0

while ((i = fis.read(b)) >0) {

os.write(b, 0, i)

}

fis.close()

os.flush()

os.close()

} catch (Exception e) {

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/8180381.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存