java ,SmartUpload上传文件后怎么把上传到服务器上的文件路径写入数据库
上传文件时,需要给SmartUpload传一个上传文件的保存地址,一般都用一个String来表示,使用request来获得。比如,你要把文件保存在项目路径下的upload文件夹,刚:
String
path
=
requestgetRealPath("upload");//获取upload文
//夹的绝对路径。
//得到:c://项目名/upload/
然后再拼上你的文件名,比如你上传一个叫testtxt的文件,则全部的URL为:
path
+
fileName
=
"c:///项目名/upload/"+"texttxt";
在实际的编程中,其实数据库只需要保存fileName就可以了,path作为配置,每次系统加载时再去读取,这样做的好处是:系统的环境变化时,只需要修改配置文件就能够搞定,而且不会重复保存多余的路径(因为路径都是一样的)
String realpath = ServletActionContextgetServletContext()getRealPath("/upload") ;//获取服务器路径
String[] targetFileName = uploadFileName;
for (int i = 0; i < uploadlength; i++) {
File target = new File(realpath, targetFileName[i]);
FileUtilscopyFile(upload[i], target);
//这是一个文件复制类copyFile()里面就是IO操作,如果你不用这个类也可以自己写一个IO复制文件的类
}
其中private File[] upload;// 实际上传文件
private String[] uploadContentType; // 文件的内容类型
private String[] uploadFileName; // 上传文件名
这三个参数必须这样命名,因为文件上传控件默认是封装了这3个参数的,且在action里面他们应有get,set方法!
利用SVN这个软件,百度就能下载,安装完后根据公司的SVN地址就可以访问提交的代码等文件并导入到本地,自己写的代码也可以提交上去。
而且eclipse、Myeclipse也可以安装SVN插件,直接在软件内检出和提交代码。
绝大部分公司都是用的SVN软件来管理、同步代码。
上传一般考虑两种办法:1、上传到服务器,数据库中存储服务器上的相对路径;2、转换为二进制流存入到数据库中。现在常用的做法都是选择第一种,因为第二种太占数据库空间,而且查找读取效率不高。很多开源的文件上传框架(比如spring中的commons-fileupload)都是采用第一种方式。上传到服务器不会影响系统的运行速度,你可以选择将的目录建立在非系统盘,存储容量比较大的盘,如F盘等。注意名字不要重复,建议用uuid
服务器端,做一个FTP,客户端使用APACHE的FTP组件上传。。。。。。。
或
服务器端实现HTTP的POST接收,,,,,客户端使用httpclient组件post上去
/
文件上传处理主程序。
@return int 操作结果 0 文件操作成功;1 request对象不存在。 2 没有设定文件保存路径或者文件保存路径不正确;3
没有设定正确的enctype;4 文件操作异常。
/
public Map<String, String> fileupload_java(HttpServletRequest request,String uploadpath) {
Map<String, String> param = new HashMap<String, String>();
try {
// 参数或者文件名
String name = null;
// 参数的value
String value = null;
// 读取的流是否为文件的标志位
boolean fileFlag = false;
// 要存储的文件。
File tmpFile = null;
// 上传的文件的名字
String fName = null;
FileOutputStream baos = null;
BufferedOutputStream bos = null;
int rtnPos = 0;
byte[] buffs = new byte[BUFSIZE 8];
// 取得ContentType
String contentType = requestgetContentType();
int index = contentTypeindexOf("boundary=");
String boundary = "--" + contentTypesubstring(index + 9);
String endBoundary = boundary + "--";
// 从request对象中取得流。
ServletInputStream sis = requestgetInputStream();
// 读取1行
while ((rtnPos = sisreadLine(buffs, 0, buffslength)) != -1) {
String strBuff = new String(buffs, 0, rtnPos);
if (strBuffstartsWith(boundary)) {
if (name != null && nametrim()length() > 0) {
if (fileFlag) {
bosflush();
baosclose();
bosclose();
baos = null;
bos = null;
paramput(name, tmpFilegetAbsolutePath());
} else {
String paramValue = paramget(name);
paramValue += ","+ value;
paramput(name, paramValue);
}
}
name = new String();
value = new String();
fileFlag = false;
fName = new String();
rtnPos = sisreadLine(buffs, 0, buffslength);
if (rtnPos != -1) {
strBuff = new String(buffs, 0, rtnPos);
if (strBufftoLowerCase()startsWith("content-disposition: form-data; ")) {
int nIndex = strBufftoLowerCase()indexOf("name=\"");
int nLastIndex = strBufftoLowerCase()indexOf("\"", nIndex + 6);
name = strBuffsubstring(nIndex + 6, nLastIndex);
}
int fIndex = strBufftoLowerCase()indexOf("filename=\"");
if (fIndex != -1) {
fileFlag = true;
int fLastIndex = strBufftoLowerCase()indexOf("\"", fIndex + 10);
// fName = strBuffsubstring(fIndex + 10, fLastIndex);
fName = new String(strBuffsubstring(fIndex + 10, fLastIndex)getBytes(),"gbk");
fName = FileLgetFileNameWithoutSeprater(fName);
if (fName == null || fNametrim()length() == 0) {
fileFlag = false;
sisreadLine(buffs, 0, buffslength);
sisreadLine(buffs, 0, buffslength);
sisreadLine(buffs, 0, buffslength);
continue;
}else{
fName = FileLgetFileNameTime(fName);
sisreadLine(buffs, 0, buffslength);
sisreadLine(buffs, 0, buffslength);
}
}
}
} else if (strBuffstartsWith(endBoundary)) {
if (name != null && nametrim()length() > 0) {
if (fileFlag) {
bosflush();
baosclose();
bosclose();
baos = null;
bos = null;
paramput(name, tmpFilegetAbsolutePath());
} else {
String paramValue = paramget(name);
paramValue += ","+ value;
paramput(name, paramValue);
}
}
} else {
if (fileFlag) {
if (baos == null && bos == null) {
tmpFile = new File(uploadpath + fName);
baos = new FileOutputStream(tmpFile);
bos = new BufferedOutputStream(baos);
}
boswrite(buffs, 0, rtnPos);
baosflush();
} else {
value = value + strBuff;
}
}
}
} catch (IOException e) {
eprintStackTrace();
}
return param;
}
这里你弄错了一个问题;\x0d\你的程序是要传递的二进制数据\x0d\而不是传递路径,然后再到服务器读取文件数据(你的服务器有这个文件)\x0d\只有当你的服务器下有这个文件了,你传递一个路径,读取是可以的\x0d\//---\x0d\关于如何上传文件, 自己google一下,很多教程
如果服务器开通了ftp服务,你的客户端可以实现一个ftp的客户端,通过ftp服务将文件上传到服务器的指定目录下,可以使用orgapachecommonsnetftpFTPClient这个类去实现,非常的简单,网上有很多现成的代码可以用
0条评论