服务器端怎么能获得本地电脑上传文件的路径
要获取excel的file而不是路径 路径在浏览器中是不确定因素在ie的file标签是可以获取路径的 而用火狐就获取不到 所以不要用路径你应该把form标签设置enctype="multipart/form-data"属性 然后在后台接收formfile传过来的东西 用file接一下之后你要存本地就可以用io流存 如果要存数据库就把二进制流存数据库就行了 现在上传有很多方法 去网上找找 我说的这个是最简单的
问一下,你是想做ftp上传下载么?
首先你需要安装一个ftp服务端程序,启动起来,然后下载一个ftp客户端程序,测试能不能连接,首先这一块儿需要测试通过。
代码ftp上传下载
21 上传代码:
import javaioFile;
import javaioFileInputStream;
import orgapachecommonsnetftpFTPClient;
import orgapachecommonsnetftpFTPReply;
public class test {
private FTPClient ftp;
/
@param path 上传到ftp服务器哪个路径下
@param addr 地址
@param port 端口号
@param username 用户名
@param password 密码
@return
@throws Exception
/
private boolean connect(String path,String addr,int port,String username,String password) throws Exception {
boolean result = false;
ftp = new FTPClient();
int reply;
ftpconnect(addr,port);
ftplogin(username,password);
ftpsetFileType(FTPClientBINARY_FILE_TYPE);
reply = ftpgetReplyCode();
if (!FTPReplyisPositiveCompletion(reply)) {
ftpdisconnect();
return result;
}
ftpchangeWorkingDirectory(path);
result = true;
return result;
}
/
@param file 上传的文件或文件夹
@throws Exception
/
private void upload(File file) throws Exception{
if(fileisDirectory()){
ftpmakeDirectory(filegetName());
ftpchangeWorkingDirectory(filegetName());
String[] files = filelist();
for (int i = 0; i < fileslength; i++) {
File file1 = new File(filegetPath()+"\\"+files[i] );
if(file1isDirectory()){
upload(file1);
ftpchangeToParentDirectory();
}else{
File file2 = new File(filegetPath()+"\\"+files[i]);
FileInputStream input = new FileInputStream(file2);
ftpstoreFile(file2getName(), input);
inputclose();
}
}
}else{
File file2 = new File(filegetPath());
FileInputStream input = new FileInputStream(file2);
ftpstoreFile(file2getName(), input);
inputclose();
}
}
public static void main(String[] args) throws Exception{
test t = new test();
tconnect("", "localhost", 21, "yhh", "yhhazr");
File file = new File("e:\\uploadify");
tupload(file);
}
}
22 下载代码
这里没有用到filter,如果用filter就可以过滤想要的文件。
public class Ftp {
/
@param args
/
public static void main(String[] args) {
// TODO Auto-generated method stub
Ftp ftp = new Ftp();
String hostname = "wwwstrawberrycom";
Integer port = 21;
String username = "username";
String password = "password";
String remote = "/ctxt";
String local = "/home/tin/LeonChen/FTP/";
try {
ftpconnect(hostname, port, username, password);
Systemoutprintln("接收状态:"+ftpdownload(remote, local));
ftpdisconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
private FTPClient ftpClient = new FTPClient();
/
连接到FTP服务器
@param hostname 主机名
@param port 端口
@param username 用户名
@param password 密码
@return 是否连接成功
@throws IOException
/
private boolean connect(String hostname, int port, String username,
String password) throws IOException {
ftpClientconnect(hostname, port);
ftpClientsetControlEncoding("UTF-8");
if (FTPReplyisPositiveCompletion(ftpClientgetReplyCode())) {
if (ftpClientlogin(username, password)) {
return true;
}
}
disconnect();
return false;
}
/
从FTP服务器上下载文件,支持断点续传,上传百分比汇报
@param remote 远程文件路径
@param local 本地文件路径
@return 上传的状态
@throws IOException
/
public DownloadStatus download(String remote, String local)
throws IOException {
// 设置被动模式
ftpCliententerLocalPassiveMode();
// 设置以二进制方式传输
ftpClientsetFileType(FTPBINARY_FILE_TYPE);
DownloadStatus result;
// 检查远程文件是否存在
FTPFile[] files = ftpClientlistFiles(new String(remote
getBytes("UTF-8"), "iso-8859-1"));
if (fileslength != 1) {
Systemoutprintln("远程文件不存在");
return DownloadStatusRemote_File_Noexist;
}
long lRemoteSize = files[0]getSize();
String fildName = files[0]getName();
// 本地存在文件,进行断点下载
File f = new File(local+fildName);
if (fexists()) {
long localSize = flength();
if (localSize >= lRemoteSize) {
Systemoutprintln("本地文件大于远程文件,下载中止");
return DownloadStatusLocal_Bigger_Remote;
}
// 进行断点续传,并记录状态
FileOutputStream out = new FileOutputStream(f, true);
ftpClientsetRestartOffset(localSize);
InputStream in = ftpClientretrieveFileStream(new String(remotegetBytes("UTF-8"), "iso-8859-1"));
byte[] bytes = new byte[1024];
long step = lRemoteSize / 100;
long process = localSize / step;
int c;
while ((c = inread(bytes)) != -1) {
outwrite(bytes, 0, c);
localSize += c;
long nowProcess = localSize / step;
if (nowProcess > process) {
process = nowProcess;
if (process % 10 == 0)
Systemoutprintln("下载进度:" + process);
// TODO 更新文件下载进度,值存放在process变量中
}
}
inclose();
outclose();
boolean isDo = ftpClientcompletePendingCommand();
if (isDo) {
result = DownloadStatusDownload_From_Break_Success;
} else {
result = DownloadStatusDownload_From_Break_Failed;
}
} else {
OutputStream out = new FileOutputStream(f);
InputStream in = ftpClientretrieveFileStream(new String(remotegetBytes("UTF-8"), "iso-8859-1"));
byte[] bytes = new byte[1024];
long step = lRemoteSize / 100;
long process = 0;
long localSize = 0L;
int c;
while ((c = inread(bytes)) != -1) {
outwrite(bytes, 0, c);
localSize += c;
long nowProcess = localSize / step;
if (nowProcess > process) {
process = nowProcess;
if (process % 10 == 0)
Systemoutprintln("下载进度:" + process);
// TODO 更新文件下载进度,值存放在process变量中
}
}
inclose();
outclose();
boolean upNewStatus = ftpClientcompletePendingCommand();
if (upNewStatus) {
result = DownloadStatusDownload_New_Success;
} else {
result = DownloadStatusDownload_New_Failed;
}
}
return result;
}
private void disconnect() throws IOException {
if (ftpClientisConnected()) {
ftpClientdisconnect();
}
}
}
不知道你是不是想得到某一文件夹的所有文件,如果是,可以试试下面的代码:
string Folder = ServerMapPath("~/YourFolder/");
SystemIODirectoryInfo oDir = new SystemIODirectoryInfo(Folder);
SystemIOFileInfo[] aFiles = oDirGetFiles();
for (int i = 0; i < aFilesLength; i++)
{
ResponseWrite("文件路径:" + aFiles[i]FullName + "<br />");
}
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方法!
服务器使用的是什么?tomcat?
String loadpath = requestgetSession()getServletContext()getRealPath("/");
String root = new File(loadpath)getParentFile()getParentFile()getAbsolutePath();
这个可以获取到tomcat的服务器的项目的同级目录
0条评论