使用ip地址访问不能上传文件到服务器数据库的解决方案

最近写了一个文件上传的jsp,但是在电脑上使用ip地址加端口号访问此jsp界面,可以访问得到但是就是不能够上传文件到指定的服务器Mysql数据库。在服务器使用本机ip就能够访问且能够上传文件。我把这两种上传的方法对比了一下,发现问题出现在文件的路径上。当在电脑上使用ip访问时,上传文件后,服务器只收到了此文件的名称,仅仅是名称,并没有该文件的绝对路径,所以它抛出了此文件找到异常。但是在服务器本地上传文件则不会出现这个问题,数据库能够得到文件的绝对路径。找到了问题的所在,此刻确实让我欣喜若狂。但是得怎么解决这个问题了,我查看了相关资料,他们绝大多数都是使用某某框架,某某apache插件。但是我试着去用这些插件时发现还是不能解决这个问题,还是出现以前的老毛病。顿时我就无语了,,,,,,

思索了两天我想换一种思路试试,看可不可以这样,我先把文件上传到服务器本地磁盘,然后再让数据库在本地磁盘找到该文件的真实路径再上传。通过我的调试,确实可以这样。我发现把文件上传到指定的服务器磁盘不管是在该服务器通过Localhost上传还是在自己电脑上通过ip地址访问上传都可以实现上传。mysql数据库不能够上传文件的原因是没有找到该文件(其实是没有找到该文件的绝对路径,当然找不到该文件了)所以我先把文件上传到服务器电脑磁盘上,然而Mysql直接在本机上查找文件上传,这时是能够找到该文件的路径的。

这个是我写的文件上传servlet,用来接收表单的文件和文本然后把文件保存到服务器的本地,接着mysql访问该本地地址接着上传到mysql表里保存。当需要使用该照片时可以直接通过数据流的形式从mysql中读出来显示到指定的jsp上,下面是我的代码:

package com.info;

import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.util.* ;
import java.sql.*;
import java.io.*;
@WebServlet("/FileUploadServlet")
@MultipartConfig(location="C:\\",fileSizeThreshold=1024)
public class FileUploadServlet extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setCharacterEncoding("gb2312");
		String mnumber = request.getParameter("mnumber");
		Part p = request.getPart("fileName");//得到文件名字,这个是真正的全名。包含了文件头,格式之类的。不是路径名字
		String h = p.getHeader("content-disposition");
		String fname = h.substring(38, h.length()-1);//得到文件的路径和名字
		String message = " ";
		if(p.getSize()>1024*1024*10)
		{
			p.delete();
			message = "fail";
		}
		else{
			String path = "C:\\mysqlphoto\\";//先上传到服务器上磁盘的c盘mysqlphoto目录下
			p.write(path+"\\"+fname);//把文件写入该目录
			fname = path+fname;//重新定义文件的觉对路径
		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;
		try{
			Class.forName("com.mysql.jdbc.Driver");
			String dbUrl = "jdbc:mysql://localhost:3306/cricket?useUnicode=true&characterEncoding=GB2312";
			String dbUser = "root";
			String dbPsw = "1195726908";
			con = DriverManager.getConnection(dbUrl,dbUser, dbPsw);
			FileInputStream str = new FileInputStream(fname);//通过该路径找到文件,把文件转换为流的形式上传到数据库
			String sql = "insert into imageinfo values(?,?)";
			PreparedStatement pstmt = con.prepareStatement(sql);
			pstmt.setString(1, mnumber);//上传表单传过来的文本文件
			pstmt.setBinaryStream(2, str,str.available());//上传本地上c盘的数据流文件
			pstmt.execute();
			String flag = "success";
			con.close();
			pstmt.close();//上传成功后关闭连接,方便后续再连接。
			if(flag!=null)
			{
				request.getRequestDispatcher("showphoto2.jsp").forward(request, response);
			}
			
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}

	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值