java上传到指定文件夹问题
我想在上传一篇文章的同时,可以上传相关图片,图片上传到以文章名为名的新建文件夹里面!或者上传完文章,再上传相关图片,也是保存在以文章名为名的新建文件夹里面!我写了一个ne...
我想在上传一篇文章的同时,可以上传相关图片,图片上传到以文章名为名的新建文件夹里面!或者上传完文章,再上传相关图片,也是保存在以文章名为名的新建文件夹里面!
我写了一个newfile类,写了一个uploadaction 该怎么传值?或者,该怎么实现我要的效果呢? 高分求助!有代码,效果好的话,另加分! 展开
我写了一个newfile类,写了一个uploadaction 该怎么传值?或者,该怎么实现我要的效果呢? 高分求助!有代码,效果好的话,另加分! 展开
4个回答
展开全部
servlet类
package org.whatisjava.servlet;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// 用于设定诸如缓存之类的参数,和性能相关
// 此处用默认设定
DiskFileItemFactory dfif = new DiskFileItemFactory();
// 解析表单中的数据
ServletFileUpload upload = new ServletFileUpload(dfif);
upload.setSizeMax(10 * 1024 * 1024); // 允许上传的最大值
List list = upload.parseRequest(request); // 开始解析request对象中的表单数据
// list中是FileItem对象
// 一个FileItem用于封装一个上传的文件数据
if (list.size() >= 1) {
FileItem item = (FileItem) list.get(0);
// 获得上文件的路径名
String name = item.getName();
name = name.substring(name.lastIndexOf("\\") + 1);
// 把上传的文件数据写入本地文(服务器端)件文件夹的名字为upload
String path = "upload";
// Sun的标准,服务器实现的API
ServletContext ctx = this.getServletContext();
path = ctx.getRealPath(path);
File file = new File(path);
if(!file.exists()){
System.out.println("创建文件夹");
file.mkdir();
}
System.out.println(path);
System.out.println(name);
//将文件放到指定的地方
item.write(new File(path, name));
response.sendRedirect("upload_form.jsp");
}
} catch (Exception e) {
throw new ServletException("file upload error!", e);
}
}
}
页面<form action="upload" method="post" enctype="multipart/form-data">
<table cellpadding="0" cellspacing="0" border="0"
class="form_table">
<tr>
<td valign="middle" align="right">
上传
</td>
<td valign="middle" align="left">
<input type="file" class="inputgri" name="file1" />
</td>
</tr>
</table>
<p>
<input type="submit" class="button" value="提交 »" />
</p>
</form>
web.xml
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>
org.whatisjava.servlet.UploadServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
jar包
commons-io-1.3.2.jar
commons-fileupload-1.2.1.jar
commons-fileupload-1.2.1-javadoc.jar
commons-fileupload-1.2.1-sources.jar
package org.whatisjava.servlet;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// 用于设定诸如缓存之类的参数,和性能相关
// 此处用默认设定
DiskFileItemFactory dfif = new DiskFileItemFactory();
// 解析表单中的数据
ServletFileUpload upload = new ServletFileUpload(dfif);
upload.setSizeMax(10 * 1024 * 1024); // 允许上传的最大值
List list = upload.parseRequest(request); // 开始解析request对象中的表单数据
// list中是FileItem对象
// 一个FileItem用于封装一个上传的文件数据
if (list.size() >= 1) {
FileItem item = (FileItem) list.get(0);
// 获得上文件的路径名
String name = item.getName();
name = name.substring(name.lastIndexOf("\\") + 1);
// 把上传的文件数据写入本地文(服务器端)件文件夹的名字为upload
String path = "upload";
// Sun的标准,服务器实现的API
ServletContext ctx = this.getServletContext();
path = ctx.getRealPath(path);
File file = new File(path);
if(!file.exists()){
System.out.println("创建文件夹");
file.mkdir();
}
System.out.println(path);
System.out.println(name);
//将文件放到指定的地方
item.write(new File(path, name));
response.sendRedirect("upload_form.jsp");
}
} catch (Exception e) {
throw new ServletException("file upload error!", e);
}
}
}
页面<form action="upload" method="post" enctype="multipart/form-data">
<table cellpadding="0" cellspacing="0" border="0"
class="form_table">
<tr>
<td valign="middle" align="right">
上传
</td>
<td valign="middle" align="left">
<input type="file" class="inputgri" name="file1" />
</td>
</tr>
</table>
<p>
<input type="submit" class="button" value="提交 »" />
</p>
</form>
web.xml
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>
org.whatisjava.servlet.UploadServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
jar包
commons-io-1.3.2.jar
commons-fileupload-1.2.1.jar
commons-fileupload-1.2.1-javadoc.jar
commons-fileupload-1.2.1-sources.jar
展开全部
可以先登录到远程服务器,之后通过changeWorkingDirectory切换到指定的文件夹下进行上传。
举例:
**
* 上传文件
*
* @param fileName
* @param plainFilePath 文件路径路径
* @param filepath
* @return
* @throws Exception
*/
public static String fileUploadByFtp(String plainFilePath, String fileName, 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("加密上传文件开始");
Log.info("连接远程上传服务器"+CCFCCBUtil.CCFCCBHOSTNAME+":"+22);
ftpClient.connect(CCFCCBUtil.CCFCCBHOSTNAME, 22);
ftpClient.login(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBLOGINPASSWORD);
FTPFile[] fs;
fs = ftpClient.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(filepath)) {
bl="true";
ftpClient.changeWorkingDirectory("/"+filepath+"");
}
}
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, fis);
Log.info("上传文件成功:"+fileName+"。文件保存路径:"+"/"+filepath+"/");
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);
}
}
}
}
备注:只需要修改上传的服务器地址、用户名、密码即可进行服务器访问上传。根据实际需要修改即可。
举例:
**
* 上传文件
*
* @param fileName
* @param plainFilePath 文件路径路径
* @param filepath
* @return
* @throws Exception
*/
public static String fileUploadByFtp(String plainFilePath, String fileName, 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("加密上传文件开始");
Log.info("连接远程上传服务器"+CCFCCBUtil.CCFCCBHOSTNAME+":"+22);
ftpClient.connect(CCFCCBUtil.CCFCCBHOSTNAME, 22);
ftpClient.login(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBLOGINPASSWORD);
FTPFile[] fs;
fs = ftpClient.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(filepath)) {
bl="true";
ftpClient.changeWorkingDirectory("/"+filepath+"");
}
}
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, fis);
Log.info("上传文件成功:"+fileName+"。文件保存路径:"+"/"+filepath+"/");
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);
}
}
}
}
备注:只需要修改上传的服务器地址、用户名、密码即可进行服务器访问上传。根据实际需要修改即可。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义uploadActionForm,成员变量有String title,FormFile files,当文章上传是,在uploadaction中通过form拿到title和fiels,然后存文件夹就不用说了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用jspsmart 去看看吧 那个操作简单
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询