//下面这句必须加,不然报错
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) {
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)