我已经有很好的解决办法了!:)
其实二进制上传中,在form表单里不必加上enctype="multipart/form-data",提交后新建image为文件类型,然后取得文件的长度,设置它为FileInputStream方式,以setBinaryStream('',fis,l2)方式存入数据库就行了,很简单!
下面是我的代码:
public void AddAllLink(LinkInfo link) throws Exception {
    Connection con=DatabaseConn.getConnection();
    java.io.File file=new java.io.File(link.getImage());
    String name=file.getName();
    long l1=file.length();
    int l2=(int)l1;
    java.io.FileInputStream fis=new java.io.FileInputStream(file);
    String sql="insert into tbl_link (typeid,title,url,image,image_ext,dead_line) values(?,?,?,?,?,?)";
    PreparedStatement stm=con.prepareStatement(sql);
    stm.setInt(1,link.getTypeid());
    stm.setString(2,DbTrans.encode(link.getTitle()));
    stm.setString(3,DbTrans.encode(link.getUrl()));
    stm.setBinaryStream(4,fis,l2);
    stm.setString(5,name);
    stm.setDate(6,java.sql.Date.valueOf(link.getDead_line()));
    stm.execute();
    stm.close();
    con.close();
}<form name="form1" method="post"  action="">
      <table width="37%" border="0" align="center">
        <tr><td>
类别:<select name="typeid"></select></td></tr>
<tr><td>题目:<input name="title" type="text" value=""></td></tr>
  <tr><td>网址:<input name="url" type="text" value=""></td></tr>
  <tr><td>有效时期:<input name="dead_line" type="text" value="">&nbsp;
  <IMG alt=选择正确的时间 onclick='fCalendarDlg(dead_line);return false' src='../date/datetime.gif' width='16' height='16'>
  </td></tr>
  <tr><td>图片:<input name="image" type="file" value=""></td></tr>
  <tr><td>
  <input class=buttonface type="submit" name="submit" value=" 确定 ">
  <input class=buttonface type="submit" name="Reset" value=" 取消 " onClick="window.close()">
  </td></tr>
</table>
</form>String submit=request.getParameter("submit");
if(submit!=null) {
    link.AddAllLink(info);
    out.print("信息已更改!三秒钟后自动返回!");
%>
<script language="javascript">
setTimeout("window.location='index.jsp'","3000");
</script>还得请大家评价评价!:)

解决方案 »

  1.   

    form表单里不加上enctype="multipart/form-data 那你的文件数据上传不到服务器端的。还有你的 LinkInfo link 这个是在什么地方生成的?
      

  2.   

    AgathaZ(游弋的小鱼) ,你这样写只能是本地有用,服务器端根本接受不到。
    建议楼主:文件(blob)
    在actionForm中建两个参数:
    文件名称(FormFile),文件类型(String)
    在进库的时候记得要转byte[]:
    byte[] 文件名称别名 = new byte[文件名称.getFileSize()];
    文件名称.getInputStream().read(文件名称别名);
      

  3.   

    哈哈,这个办法我早就试过了,其实这部叫上传,你还不如直接提交,只保存文件路径,文件名和大小的,这样的话就不会浪费服务器空间了,也用不着jspsmartupload组件了。
      

  4.   

    yeshucheng(叶澍成) :
    你好!
    在进库的时候记得要转byte[]:
    byte[] 文件名称别名 = new byte[文件名称.getFileSize()];
    文件名称.getInputStream().read(文件名称别名);你的这个和我的有什么区别吗?从客户端可以上传到服务器端吗?
      

  5.   

    我的问题已解决!
    File file = myUpload.getFiles().getFile(0);
    if (!file.isMissing()){
        byte[] bytArray = new byte[file.getSize()];
        for (int i= 0 ;i<file.getSize();i++) {
          bytArray[i] = file.getBinaryData(i);
        }
    }
    这样通过循环得到:)