急急急!!!JSP上传图片的问题

sushou2009 2009-07-07 09:52:21
我用jsp做的网站,是做商品展示的,我数据库中的商品表中的商品图片一列是String类型的,添加的是照片的名称。我现在想在页面中添加商品的图片的时候直接从电脑里面选的,也就是以前添加图片是添加图片的名称,现在想的是添加照片的地址,我该怎么样做?
...全文
617 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tan648636045 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 eskynan 的回复:]

刚才给你试了一下 可以直接用你声明的上传的类 SmartUpload su 这个 su.getRequest().getParameter("Your Value");

测试通过!!
[/Quote]

谢谢你,真的测试通过,但是如何解决乱码问题呢?
疯狂的犹太人 2009-12-16
  • 打赏
  • 举报
回复
谢谢了,参考一下你的代码
eskynan 2009-09-02
  • 打赏
  • 举报
回复
刚才给你试了一下 可以直接用你声明的上传的类 SmartUpload su 这个 su.getRequest().getParameter("Your Value");

测试通过!!
xiaohuli1984 2009-07-07
  • 打赏
  • 举报
回复
不明白你意思 表达不明确。。。。 图片上传的问题是非常简单的问题,想存图片路径的话,你自己把相对路径和图片名称的字符串连起来存到数据库就行啊。
xuexijava 2009-07-07
  • 打赏
  • 举报
回复
楼主的意思是说这个字段属性不变,但是在JSP页面表单里先中本里图片后,表单项里显示的是该图片的路径,然后把这个路径给存入数据库是吧?
可以试试JS实现
sangshusen_1988 2009-07-07
  • 打赏
  • 举报
回复
建议使用fileupload组件,自己手写是很费劲的
Defonds 2009-07-07
  • 打赏
  • 举报
回复
我的 CSDN 资源里共享了一个 jsp + servlet 版的上传源码和一个 struts1.2 版的上传源码,下载后即可使用。楼主可以去看看,参考下
landyshouguo 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 alpha_423 的回复:]
希望有所帮助, 设置ENCTYPE="multipart/form-data“ 后不能用request.getParamater的了

DefaultFileItemFactory factory = new DefaultFileItemFactory();
FileUpload servletFileUpload = new FileUpload(factory);
List list = servletFileUpload.parseRequest(request);
Iterator iter = list.iterator();
while (iter.hasNext())
{
FileItem fil…
[/Quote]ding
alpha_423 2009-07-07
  • 打赏
  • 举报
回复
希望有所帮助, 设置ENCTYPE="multipart/form-data“ 后不能用request.getParamater的了

DefaultFileItemFactory factory = new DefaultFileItemFactory();
FileUpload servletFileUpload = new FileUpload(factory);
List list = servletFileUpload.parseRequest(request);
Iterator iter = list.iterator();
while (iter.hasNext())
{
FileItem fileItem = (FileItem) iter.next();
// 非文件域
if (fileItem.isFormField())
{
String fieldName = fileItem.getFieldName();
String fieldValue = fileItem.getString("UTF-8");
if (!StringUtil.isNullString(fieldValue))
{
// 用户操作标识
if ("serialNumber".equals(fieldName))
{
product.setSerialNumber(fieldValue);
}
........
else
{
// 文件全路径
String temp = fileItem.getName();
is = fileItem.getInputStream();
// 做文件操作。。。。
}
}
sushou2009 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 alpha_423 的回复:]
要上传文件的话,ENCTYPE="multipart/form-data“是必须的,你的业务逻辑都在jsp页面上实现的么。。。不是很明白
[/Quote]
都在一个jsp页面实现的,上面有代码,你看下
alpha_423 2009-07-07
  • 打赏
  • 举报
回复
要上传文件的话,ENCTYPE="multipart/form-data“是必须的,你的业务逻辑都在jsp页面上实现的么。。。不是很明白
sushou2009 2009-07-07
  • 打赏
  • 举报
回复
这是我的代码:
<%@ page language="java"
import="s2jsp.bysj.dao.*,s2jsp.bysj.entity.*,java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*,java.sql.*,com.jspsmart.upload.*,java.util.*"
pageEncoding="gbk"%>
<%@ include file="checkSession.jsp"%>
<html>

<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>管理员-添加 </title>
<link rel="stylesheet" type="text/css" href="../css/style_admin.css">
<%
request.setCharacterEncoding("gbk");
response.setContentType("text/html;charset=gb2312");
String action = request.getParameter("action");
if (action != null && "save".equals(action)) {
String serialNumber = request.getParameter("serialNumber");
String name = request.getParameter("name");
String brand = request.getParameter("brand");
String model = request.getParameter("model");
String price = request.getParameter("price");

String description = request.getParameter("description");

Product product = new Product();

String image = null;
SmartUpload mySmartUpload = new SmartUpload();
//初始化
mySmartUpload.initialize(pageContext);
try {
//只允许上载此类文件
mySmartUpload.setAllowedFilesList("jpg,gif");
mySmartUpload.upload();
} catch (Exception e) {
%>
<SCRIPT language=javascript>
alert("上传的格式不对");
history.back();
</script>
<%
}
try {
com.jspsmart.upload.File myFile = mySmartUpload.getFiles()
.getFile(0);
if (myFile.isMissing()) {
%>
<SCRIPT language=javascript>
alert("请先选择要上传的文件");
history.back();
</script>
<%
} else {
mySmartUpload.save("/image");
image = myFile.getFileName();

}
} catch (Exception e) {
out.print(e.getMessage());
}

product.setSerialNumber(serialNumber);
product.setName(name);
product.setBrand(brand);
product.setModel(model);
product.setPrice(Double.parseDouble(price));
product.setPicture(image);
product.setDescription(description);

ProductDao productDao = new ProductDao();

int count = productDao.addProduct(product);
if (count > 0)
out
.print(" <script type='text/javascript'>alert('成功添加一条商品信息。');location.replace('manageProduct.jsp'); </script>");
else
out
.print(" <script type='text/javascript'>alert('添加失败。');history.go(-1); </script>");
}
%>
<script type="text/javascript">
function fun_check_form(){
if(document.form1.serialNumber.value==""){
alert("请输入商品编号(系列)信息信息。");
return false;
}else if(document.form1.name.value==""){
alert("请输入商品名称。");
return false;
}else if(document.form1.brand.value==""){
alert("请输入商品商标。");
return false;
}else if(document.form1.model.value==""){
alert("请输入商品型号。");
return false;
}else if(document.form1.price.value==""){
alert("请输入商品价格。");
return false;
if(!isNaN(document.form1.price.value)){
alert("");
return false;
}
}else{
return true;
}
}


function checkIsFloat(){
var nc=event.keyCode;
if(nc < 48 || nc > 57 ){
if(nc==46){
var s=document.form1.price.value;
for(var i=0;i <s.length;i++){
if(s.charAt(i)=='.'){
event.keyCode=0;
return;
}
}
}else{
event.keyCode=0;return;

}
}
}
</script>
</head>

<body>
<form name="form1" action="addProduct.jsp" method="post"
onSubmit="return fun_check_form()" ENCTYPE="multipart/form-data">
<table cellspacing="1" cellpadding="4" width="100%"
class="tableborder" id="table3">

<input type="hidden" name="action" value="save">
<tr>
<td colspan="12" class="header">
添加商品信息
</td>
</tr>
<tr>
<td class="altbg1">
商品编号(系列):
</td>
<td class="altbg2" colspan="11">
<input type="text" name="serialNumber" size="34">
</td>
</tr>
<tr>
<td class="altbg1">
商品名称:
</td>
<td class="altbg2" colspan="11">
<input type="text" name="name" size="34">
</td>
</tr>
<tr>
<td class="altbg1">
商品商标:
</td>
<td class="altbg2" colspan="11">
<input type="text" name="brand" size="34">
</td>
</tr>
<tr>
<td class="altbg1">
商品型号:
</td>
<td class="altbg2" colspan="11">
<input type="text" name="model" size="34">
</td>
</tr>
<tr>
<td class="altbg1">
商品价格:
</td>
<td class="altbg2" colspan="11">
<input type="text" name="price" size="34"
onkeypress="checkIsFloat();" />
</td>
</tr>
<tr>
<td class="altbg1">
商品图片:
</td>
<td class="altbg2" colspan="11">
<input type="file" name="picture" size="34">
</td>
</tr>
<tr>
<td class="altbg1">
商品介绍:
</td>
<td class="altbg2" colspan="11">
<textarea rows="5" cols="60" name="description"> </textarea>
</td>
</tr>


<tr>
<td class="altbg1"> </td>
<td class="altbg2" colspan="11">
<input type="submit" value="提交" name="B1" />
 
<input type="reset" value="重置" name="B2" />
</td>
</tr>

</table>
</form>
</body>

</html>

上传还是没有成功,如果表单验证里的 ENCTYPE="multipart/form-data这句不加的话,其他的能添加成功,但是图片不成功。吐过加了的话直接不成功也不报错。这到底是什么原因啊?那位大侠帮我解决下啊
lihaiwei20100 2009-07-07
  • 打赏
  • 举报
回复
ENCTYPE="multipart/form-data

<td class="altbg2" colspan="11">
<input type="file" name="picture" size="34">
</td>

name的value值就是图片的路径
chaobin05240108 2009-07-07
  • 打赏
  • 举报
回复
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>My JSP 'index1.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--
<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

这是一个图片上传程序,在上传的时候form必须加上 enctype="multipart/form-data"

否则则会有报错的情况发生,action类里新建一个demo对象,对应数据库里一条新的记录

大概方法就是这样,如果有需要的话还可以再扩展,图片上传代码完毕

<form id="form1" name="form1" action="text.do" method="post" enctype="multipart/form-data">

<input type="file" id="userImage" name="userImage">

<input type="text" id="mytext" name="mytext">

<input type="submit" value="确定">

</form>

</body>

</html>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>My JSP 'index1.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--
<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

这是一个图片上传程序,在上传的时候form必须加上 enctype="multipart/form-data"

否则则会有报错的情况发生,action类里新建一个demo对象,对应数据库里一条新的记录

大概方法就是这样,如果有需要的话还可以再扩展,图片上传代码完毕

<form id="form1" name="form1" action="text.do" method="post" enctype="multipart/form-data">

<input type="file" id="userImage" name="userImage">

<input type="text" id="mytext" name="mytext">

<input type="submit" value="确定">

</form>

</body>

</html>

传递至textAction这个类中

我用的是springside的框架,这个框架中的action默认执行的方法是list,其它不变

下边是action类

Java代码
package com.mytext.action;

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;
import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import org.apache.commons.io.output.ByteArrayOutputStream;

import org.springframework.beans.factory.annotation.Autowired;

import org.springside.modules.web.struts2.CRUDActionSupport;

import com.mytext.entity.Demo;

import com.mytext.service.DemoServices;

import com.sun.xml.internal.ws.util.ByteArrayBuffer;

@SuppressWarnings("serial")

public class TextAction extends CRUDActionSupport<Demo>{

@Autowired

private DemoServices demoServices;

private Demo demo;

private String mytext;

private File userImage;

@Override

public String delete() throws Exception {

// TODO Auto-generated method stub

return null;

}

@Override

public String list() throws Exception {

if(userImage==null)

{
return "try";
}

prepareModel();

try {

BufferedImage tt = ImageIO.read(userImage);

demo.setImage(toByte(tt));

demo.setName(mytext);

<SPAN style="COLOR: #000000; BACKGROUND-COLOR: #ffffff">demoServices.save(demo);</SPAN>




} catch (Exception e) {

System.out.println("保存失败");

return "try";

}

return "try";

//demoServices.getAllDemo();
}


//转化为流

private byte[] toByte(BufferedImage image) throws IOException


{


ByteArrayOutputStream cc = new ByteArrayOutputStream();


ImageIO.write(image, "jpg", cc);

return cc.toByteArray();

}

@Override

protected void prepareModel() throws Exception {

// TODO Auto-generated method stub

demo = new Demo();
}

@Override

public String save() throws Exception {

// TODO Auto-generated method stub

return null;

}

public Demo getModel() {

// TODO Auto-generated method stub

return demo;

}

public File getUserImg() {

return userImage;

}

public void setUserImg(File userImage) {

this.userImage = userImage;

}

public String getMytext() {

return mytext;

}

public void setMytext(String mytext) {

this.mytext = mytext;

}

public File getUserImage() {

return userImage;
}

public void setUserImage(File userImage) {

this.userImage = userImage;

}
}

package com.mytext.action;

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;
import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import org.apache.commons.io.output.ByteArrayOutputStream;

import org.springframework.beans.factory.annotation.Autowired;

import org.springside.modules.web.struts2.CRUDActionSupport;

import com.mytext.entity.Demo;

import com.mytext.service.DemoServices;

import com.sun.xml.internal.ws.util.ByteArrayBuffer;

@SuppressWarnings("serial")

public class TextAction extends CRUDActionSupport<Demo>{

@Autowired

private DemoServices demoServices;

private Demo demo;

private String mytext;

private File userImage;

@Override

public String delete() throws Exception {

// TODO Auto-generated method stub

return null;

}

@Override

public String list() throws Exception {

if(userImage==null)

{
return "try";
}

prepareModel();

try {

BufferedImage tt = ImageIO.read(userImage);

demo.setImage(toByte(tt));

demo.setName(mytext);

demoServices.save(demo);




} catch (Exception e) {

System.out.println("保存失败");

return "try";

}

return "try";

//demoServices.getAllDemo();
}


//转化为流

private byte[] toByte(BufferedImage image) throws IOException


{


ByteArrayOutputStream cc = new ByteArrayOutputStream();


ImageIO.write(image, "jpg", cc);

return cc.toByteArray();

}

@Override

protected void prepareModel() throws Exception {

// TODO Auto-generated method stub

demo = new Demo();
}

@Override

public String save() throws Exception {

// TODO Auto-generated method stub

return null;

}

public Demo getModel() {

// TODO Auto-generated method stub

return demo;

}

public File getUserImg() {

return userImage;

}

public void setUserImg(File userImage) {

this.userImage = userImage;

}

public String getMytext() {

return mytext;

}

public void setMytext(String mytext) {

this.mytext = mytext;

}

public File getUserImage() {

return userImage;
}

public void setUserImage(File userImage) {

this.userImage = userImage;

}
}


81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧