前端使用form表单提交图片后,java后台怎么获取该图片?

前端页面使用的是
<form action="<c:url value="/shop/getorderphoto.do"/>" method="POST">

<table align="center" border="0">
<tr>
<td colspan="2">请输入订单详细图片
<br /> </td>
</tr>
<tr>
<td>订单图片:</td>
<td><input type="file" name="wuliuphoto" value="" /></td>
</tr>
<tr>
<td> </td>
<td><input type="image" border="0" src="../images/button_submit.gif" name="update" /></td>
</tr>
</table>

</form>
提交图片,请问在后台的java文件中怎么获取到该图片,语句怎么写,后台使用的是spring框架

上传图片 后台获取的时候直接从数据库拿路径
下面这是servlet的内容:
package demo;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
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.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class DemoServlet extends HttpServlet {

private static final String UPLOAD_DIRECTORY = "upload";
private static final int MEMORY_THRESHOLD = 1024 * 1024 * 3; // 3MB
private static final int MAX_FILE_SIZE = 1024 * 1024 * 40; // 40MB
private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; // 50MB

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
DiskFileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload sfu=new ServletFileUpload(factory);
sfu.setHeaderEncoding("UTF-8");
sfu.setProgressListener(new ProgressListener() {

public void update(long pBytesRead, long pContentLength, int pItems) {
System.out.println("文件大小为:"+pContentLength+",当前已处理:"+pBytesRead);

}
});
//判断提交上来的数据是否是上传表单的数据
if(!ServletFileUpload.isMultipartContent(request)){
PrintWriter writer= response.getWriter();
writer.println("Error:表单必须包含 enctype=multipart/form-data");
writer.flush();
return;
}
factory.setSizeThreshold(MEMORY_THRESHOLD);
//设置临时储存目录
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
//设置最大文件上传值
sfu.setFileSizeMax(MAX_FILE_SIZE);
//设置最大请求值(包含文件和表单数据)
sfu.setSizeMax(MAX_REQUEST_SIZE);
String uploadpath=getServletContext().getRealPath("./")+ File.separator+UPLOAD_DIRECTORY;
File file=new File(uploadpath);
if(!file.exists()){
file.mkdir();
}

try {
List<FileItem> formItems = sfu.parseRequest(request);
if(formItems!=null&&formItems.size()>0){
for(FileItem item:formItems){
if(!item.isFormField()){
String fileName=new File(item.getName()).getName();
String filePath=uploadpath+File.separator+fileName;
File storeFile=new File(filePath);
System.out.println(filePath);
item.write(storeFile);
request.setAttribute("message", "文件上传成功!");
}
}
}
} catch (Exception e) {
request.setAttribute("message", "错误信息:"+e.getMessage());
}
getServletContext().getRequestDispatcher("/demo.jsp").forward(request, response);
}

}

下面是jsp的内容,jsp放到webapp下,如果想放到WEB-INF下就把servlet里转发的路径改一下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="demo.do" enctype="multipart/form-data" method="post">
<input type="file" name="file1" />
<%
String message = (String) request.getAttribute("message");
%>
<%=message%>
<input type="submit" value="提交"/>
</form>
</body>
</html>
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-07-19

首先在html的form添加:enctype="multipart/form-data"

// Java代码
@RequestMapping("/upload"   )  
    public String addUser(@RequestParam("file") CommonsMultipartFile[] files,HttpServletRequest request){  
          
        for(int i = 0;i<files.length;i++){  
            System.out.println("fileName---------->" + files[i].getOriginalFilename());  
          
            if(!files[i].isEmpty()){  
                int pre = (int) System.currentTimeMillis();  
                try {  
                    //拿到输出流,同时重命名上传的文件  
                    FileOutputStream os = new FileOutputStream("H:/" + new Date().getTime() + files[i].getOriginalFilename());  
                    //拿到上传文件的输入流  
                    FileInputStream in = (FileInputStream) files[i].getInputStream();  
                      
                    //以写字节的方式写文件  
                    int b = 0;  
                    while((b=in.read()) != -1){  
                        os.write(b);  
                    }  
                    os.flush();  
                    os.close();  
                    in.close();  
                    int finaltime = (int) System.currentTimeMillis();  
                    System.out.println(finaltime - pre);  
                      
                } catch (Exception e) {  
                    e.printStackTrace();  
                    System.out.println("上传出错");  
                }  
        }  
        }  
        return "/success";  
    }

第2个回答  2015-01-20
图片要使用文件上传的方式。既然你使用spring框架的话,那就用它本身的上传配置。
你在spring配置文件中加上这个:
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value=“10485760"/> <!--设置文件上传最大值字节:-->
</bean>

//后台

public String addUser(@RequestParam("file") MultipartFile myfile,HttpServletRequest request) throws IOException{

//下面这个方法可以实现文件上传到服务器
//不懂的话可以查下spring API

FileUtils.copyInputStreamToFile(myfile.getInputStream(), new File(realPath, myfile.getOriginalFilename()));
}追问

能不能把Java部分的代码写的详细一点,我不怎么懂Java,我只是做毕业设计的时候用一下,比如我要存到D盘的work目录下,请帮个忙,把程序补充完整吧,API我看不懂的

追答

FileUtils.copyInputStreamToFile(myfile.getInputStream(), new File(“D:\\work”, myfile.getOriginalFilename()));

本回答被网友采纳
第3个回答  2017-07-20
不是有方法获取吗,好多年不写给忘了。

前端使用form表单提交图片后,java后台怎么获取该图片?
上传图片 后台获取的时候直接从数据库拿路径下面这是servlet的内容:package demo;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;...

form表单提交后,后台怎么处理数据
1、首先创建一个名称为 formphp的html文件 。2、然后创建一form表单设置表单的name和action地址。3、接着添加两个输入框分别设置name,一个数用户名,一个是性别输入框。4、然后加入一个submit类型的输入框,再新建一个接受form表单数据的php文件act。5、在act文件中加入接收提交数据的代码,并分别打印...

java后台怎么获取form表单类型
使用request.getParameter("参数名")方法来获取form表单传过来的数据

java实现图片上传并显示?
首先,打开自己的空间,看到导航栏上的相册,点击进入然后选择上传图片,如果你还没有创建过相册,那先点击新建相册,建立一个相册。然后就可以上传图片了,首先先说单张图片的上传。

java后台怎么获取form表单里所有input的name和value
在界面的时候,就将所有的input的name和value分别放在一个字符串里面(每个name或者value用指定符号分开),然后传递给java后台,在后台将两个字符串获取并用split函数分割成存放所有name的数组和存放value的数组,这个样子就可以了。

html怎么样像java后台传递参数,java后台又是怎么接收参数?
1. 使用表单的方式传参 把表单元素放在<form> 标签里面,直接提交表单就行2. 使用URL重定向方式传值 比如:location.href = "login.do?method=checktel&name=lisi&age=10"; 后台通过 request 对象接收参数String name = request.getParameter("name");String age = request.getParameter("age"); 本回答由提问...

js文件上传的几种方式(js文件上传)
javaweb前端上传文件到后台常用的几种方式1、使用form表单提交 但是这里要记得添加enctype属性,这个属性是指定form表单在向服务器提交之前,对表单数据如何进行编码。文件域中的name="file"属性的值,需要和后台接收的对象名一致,不然接收不到。2、使用ajax提交文件 使用ajax提交首先引入jquery-form.js文件...

java后台 servlet怎么获取 data这个json串
1.这属于正常的ajax提交form表单,提交后,form表单中的参数是存放在请求的ParameterMap中的。所以后台只需要String param1=request.getParameter("【前台name】"); 就可以获得参数了。你用“data”这么获取,你确定你form表单中有name为‘data’的表单控件吗?2.request将参数是封装在parameterMap中,原生...

怎么在java的action中获取form表单中的数据
1.首先设置 表单中的数据的name值 如:<input type="text" name="username" value=""> 2.你用的是struts2,那么就在java类中写一个变量:变量名和页面上的name值一直 并有这个变量的get 和set方法 ,这样就能取到值了。希望对你有帮助 ...

java中,jsp表单提交form的时候,传到后台方法的参数问题
strust2技术,前台控件名 bean.属性名比如:user.name1 user.age等,在struts2中的action中成员变量private User user;再给它set get方法。这样当前台提交时自动将属性值name1 age等赋给user

相似回答