日期:2014-05-20  浏览次数:20724 次

java 图文上传问题(不用框架或者是组件)
期望实现的功能:jsp表单中一起传递图片和文字到servlet,servlet得到传递的值后保存到数据库中。

先帮忙看下思路,这样可以吗:
  1、从jsp页面传递图文的二进制码给servlet。
  2、在servlet中获得jsp中传递过来的值。
  3、区分是图片的二进制码和文字的二进制码。
  4、分别将二进制码转换为对应的格式(文字是字符,请问图片是什么尼?)。
  5、将文字保存到数据库中,图片保存到硬盘中,把图片路径保存在数据库中。

目前实现的代码如下:

1、jsp代码:

<form action="homeS" method="post" enctype="multipart/form-data">
 
  <textarea tabindex="1" name="Memo" rows="4" cols="70" class="qs" id="sq"></textarea>
  <br/><br/>
 
  <!-- 显示当前数输入的字符个数 -->
  <label id="nub" >140</label>
 
  <div class="hlinput"><input type="submit" class="formbutton" title="按Ctrl+Enter键发送消息" value=""/></div>
  <div class="hlload"><input title="上传图片,最大2MB" class="sl-input-file" type="file" name="picture" id="upload-file"/></div>
  </form>

2、servlet代码如下(homeS):

package com.d41741.servlet;

import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Hashtable;

import javax.resource.cci.Streamable;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class homeS extends HttpServlet {

public homeS() {
super();
}

public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}

private String[] sourceFile = new String[255]; //源文件名 

private String[] suffix = new String[255]; //文件后缀名 

private String canSuffix = ".gif.jpg.jpeg.png.rar.txt"; //可上传的文件后缀名 

private String objectPath = "F:\\'program files (x86)\\'MyEclipseWorkspace\\'FanFouImg/"; //目标文件目录 

private String[] objectFileName = new String[255]; //目标文件名 

private ServletInputStream sis = null; //输入流 

private String[] description = new String[255]; //描述状态 

private long size = 100 * 1024; //限制大小 

private int count = 0; //已传输文件数目 

private byte[] b = new byte[5102]; //字节流存放数组 

private boolean successful = true; 

private Hashtable fields = new Hashtable(); 

//设置上传文件的后缀名 

public void setSuffix(String canSuffix) { 

this.canSuffix = canSuffix; 



//设置文件保存路径 

public void setObjectPath(String objectPath) { 

this.objectPath = objectPath; 



//设置文件保存路径 

public void setSize(long maxSize) { 

this.size = maxSize; 



public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");

// 获得homeLeft.jsp中,传递过来的信息
// 获得传递过来的值之后要将图片的流和文字的流区分开,并转换为字符和图片
try{
// 得到表单传递过来的值(二进制)
sis = request.getInputStream(); 

// 将得到的二进制转换为字符
int a = 0;