java上传图片到远程服务器上,怎么解决呢?
需要这样的一个包 jcifs-1111
public static void forcdt(String dir){
InputStream in = null;
OutputStream out = null;
File localFile = new File(dir);
try{
//创建file类 传入本地文件路径
//获得本地文件的名字
String fileName = localFilegetName();
//将本地文件的名字和远程目录的名字拼接在一起
//确保上传后的文件于本地文件名字相同
SmbFile remoteFile = new SmbFile("smb://administrator:admin@10001/e$/aa/");
//创建读取缓冲流把本地的文件与程序连接在一起
in = new BufferedInputStream(new FileInputStream(localFile));
//创建一个写出缓冲流(注意jcifs-1315jar包 类名为Smb开头的类为控制远程共享计算机"io"包)
//将远程的文件路径传入SmbFileOutputStream中 并用 缓冲流套接
out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile+"/"+fileName));
//创建中转字节数组
byte[] buffer = new byte[1024];
while(inread(buffer)!=-1){//in对象的read方法返回-1为 文件以读取完毕
outwrite(buffer);
buffer = new byte[1024];
}
}catch(Exception e){
eprintStackTrace();
}finally{
try{
//注意用完操作io对象的方法后关闭这些资源,走则 造成文件上传失败等问题。!
outclose();
inclose();
}catch(Exception e){
eprintStackTrace();}
}
}
很简单。
可以手写IO读写(有点麻烦)。
怕麻烦的话使用FileUpload组件 在servlet里doPost嵌入一下代码
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
responsesetContentType("text/html;charset=gb2312");
PrintWriter out=responsegetWriter();
//设置保存上传文件的目录
String uploadDir =getServletContext()getRealPath("/up");
Systemoutprintln(uploadDir);
if (uploadDir == null)
{
outprintln("无法访问存储目录!");
return;
}
//根据路径创建一个文件
File fUploadDir = new File(uploadDir);
if(!fUploadDirexists()){
if(!fUploadDirmkdir())//如果UP目录不存在 创建一个 不能创建输出
{
outprintln("无法创建存储目录!");
return;
}
}
if (!DiskFileUploadisMultipartContent(request))
{
outprintln("只能处理multipart/form-data类型的数据!");
return ;
}
DiskFileUpload fu = new DiskFileUpload();
//最多上传200M数据
fusetSizeMax(1024 1024 200);
//超过1M的字段数据采用临时文件缓存
fusetSizeThreshold(1024 1024);
//采用默认的临时文件存储位置
//fusetRepositoryPath();
//设置上传的普通字段的名称和文件字段的文件名所采用的字符集编码
fusetHeaderEncoding("gb2312");
//得到所有表单字段对象的集合
List fileItems = null;
try
{
fileItems = fuparseRequest(request);//解析request对象中上传的文件
}
catch (FileUploadException e)
{
outprintln("解析数据时出现如下问题:");
eprintStackTrace(out);
return;
}
//处理每个表单字段
Iterator i = fileItemsiterator();
while (ihasNext())
{
FileItem fi = (FileItem) inext();
if (fiisFormField()){
String content = figetString("GB2312");
String fieldName = figetFieldName();
requestsetAttribute(fieldName,content);
}else{
try
{
String pathSrc = figetName();
if(pathSrctrim()equals("")){
continue;
}
int start = pathSrclastIndexOf('\\');
String fileName = pathSrcsubstring(start + 1);
File pathDest = new File(uploadDir, fileName);
fiwrite(pathDest);
String fieldName = figetFieldName();
requestsetAttribute(fieldName, fileName);
}catch (Exception e){
outprintln("存储文件时出现如下问题:");
eprintStackTrace(out);
return;
}
finally //总是立即删除保存表单字段内容的临时文件
{
fidelete();
}
}
}
注意 JSP页面的form要加enctype="multipart/form-data" 属性, 提交的时候要向服务器说明一下 此页面包含文件。
如果 还是麻烦,干脆使用Struts 的上传组件 他对FileUpload又做了封装,使用起来更傻瓜化,很容易掌握。
-----------------------------
以上回答,如有不明白可以联系我。
Web文件上传采用POST的方式,与POST提交表单不同的是,上传文件需要设置FORM的enctype属性为multipart/form-data由于上传的文件会比较大,因此需要设置该参数指定浏览器使用二进制上传。如果不设置,enctype属性默认为application/x-www-form-urlencoded,使用浏览器将使用ASCII向服务器发送数据,导致发送文件失败。
上传文件要使用文件域(<input type='file'/>,并把FORM的Enctype设置为multipart/form-data
1、获取服务器指定目录路径path
2、复制文件
参考代码
String dir = "/a/b/c/";String path = requestgetSession()getServletContext()getRealPath(dir)+"\\"+filegetOriginalFilename();
//path 为服务器在硬盘的绝对路径 如H:\tomcat\webapps\youproject\a\b\c\文件名txt
File newFile=new File(path);
filetransferTo(newFile); //复制文件
0条评论