java中文件上传 new File(文件路径)问题

现在是这样子,应用部署在一个叫A的服务器上(假设是电脑1),用户通过自己的电脑上的浏览器访问A的应用(假设是电脑2)点击某个菜单选择文件点击上传要上传到叫B的ftp服务器... 现在是这样子,应用部署在一个叫A的服务器上 (假设是电脑1),用户通过自己的电脑上的浏览器访问A的应用(假设是电脑2)点击某个菜单选择文件点击上传要上传到叫B的ftp服务器上(假设是电脑3),
现在是这样做的,客户端通过浏览器选择文件会先传到电脑1的某个目录下面,然后通过电脑1的文件再传到ftp上,但是感觉这样太麻烦了,后来(自己在本地的应用)页面用input type="File"控件 获取其上传的路径,new File(路径) 可以上传成功,将代码放在 A服务器上,上传的时候说不存在文件或文件夹,仔细想想才明白原来new File(路径)会在应用部署的机器上根据那个路径找文件,虽然浏览器选择的C盘根目录,但是在服务器上根本没这个文件,或者没这个目录,求解,如何new File的时候寻找客户端电脑的路径,创建的是客户端电脑选择的路径的文件
展开
 我来答
198901245631
推荐于2017-09-25 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1728万
展开全部
通过 ”new FileInputStream(文件路径)“的形式进行上传即可。举例:
/**
* 加密文件
*
* @param fileName
* @param date
* @param plainFilePath 明文文件路径路径
* @param filepath
* @return
* @throws Exception
*/
public static String encodeAESFileUploadByFtp(String plainFilePath, String fileName, String date,String filepath) throws Exception {
FileInputStream fis = null;
ByteArrayOutputStream bos = null;
FTPClient ftpClient = new FTPClient();
String bl = "false";
try {
fis = new FileInputStream(plainFilePath);
bos = new ByteArrayOutputStream(fis.available());
byte[] buffer = new byte[1024];
int count = 0;
while ((count = fis.read(buffer)) != -1) {
bos.write(buffer, 0, count);
}
bos.flush();
Log.info("加密上传文件开始");
byte[] bytes = encodeAES(key, bos.toByteArray());
ByteArrayInputStream is = new ByteArrayInputStream(bytes);
Log.info("连接远程上传服务器"+CMBCUtil.CMBCHOSTNAME+":"+2021);
ftpClient.connect(CMBCUtil.CMBCHOSTNAME, 2021);
ftpClient.login(CMBCUtil.CMBCLOGINNAME, CMBCUtil.CMBCLOGINPASSWORD);
// Log.info("连接远程上传服务器"+"192.168.54.106:"+2021);
// ftpClient.connect("192.168.54.106", 2021);
// ftpClient.login("hkrt-CMBCHK", "3OLJheziiKnkVcu7Sigz");
FTPFile[] fs;
fs = ftpClient.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(filepath)) {
bl="true";
ftpClient.changeWorkingDirectory("/"+filepath+"");
ftpClient.makeDirectory(date);
ftpClient.changeWorkingDirectory("/"+filepath+"/" + date);
}
}
Log.info("检查文件路径是否存在:/"+filepath);
if("false".equals(bl)){
ViewUtil.dataSEErrorPerformedCommon( "查询文件路径不存在:"+"/"+filepath);
return bl;
}
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
// 设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile(fileName, is);
Log.info("加密上传文件成功:"+fileName+"。文件保存路径:"+"/"+filepath+"/" + date);
return bl;
} catch (Exception e) {
throw e;
} finally {
if (fis != null) {
try {
fis.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
if (bos != null) {
try {
bos.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
召召12345
2014-01-24
知道答主
回答量:75
采纳率:0%
帮助的人:10.3万
展开全部
有绝对路径和相对路径的区别
追问
就是说可以了?要怎么弄
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
雨a心竹
2014-01-24 · TA获得超过206个赞
知道小有建树答主
回答量:261
采纳率:0%
帮助的人:146万
展开全部
不行的,你的服务器端不能拿客户端的东西去做事情,只有变成自己的才行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
windvix
2014-01-24 · TA获得超过386个赞
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:201万
展开全部
为什么服务器上的文件路径要和客户端的路径一样,假设服务器使用的是Linux系统,那它根本 就不存在C盘的概念。
追问
我意思是能不能直接跳过 用户传文件到应用服务器那一步,  就相当于借助 应用上的程序去完成单独的 客户端电脑上的文件传到ftp上
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
宁小波特
2014-01-24 · 超过33用户采纳过TA的回答
知道答主
回答量:130
采纳率:0%
帮助的人:72.3万
展开全部
你这办法是根本不行的,假设服务器是linux的,用户用windows,你怎么创建?
更多追问追答
追问
我是这样想的用户本地是windows    ftp服务器也是windows 单独的ftp上传的话两个计算机就可以了,如果能获取用户电脑的文件就能省不少事了,因为现在是用户先传到应用服务器,应用服务器再找刚才上传的文件再传到ftp服务器,不知道我的思路有没有问题,或者有没有什么好的方法呢
追答
你可以这样做,这些所谓的文件在网络中都是流的形式传输的,那么用户文件到你应用服务器的输入流直接当做文件服务器的输出流,那么你就不需要应用服务器中转,相当于直接传当ftp服务器上。(就相当于用户到服务器有根管道,服务器到ftp另一根管道,你要做的工作就是把两个管子连接在一起。)上传部分自己写一下就ok了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 4条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式