Java模拟表单提交文件到Struts2 Action处理
72 浏览量
更新于2024-08-28
收藏 54KB PDF 举报
该资源主要讲述了如何在Java中模拟表单方式发送URL请求来提交文件,并且描述了后台Struts2的Action如何接收并处理这些请求。内容涉及到Java的网络编程,文件操作,以及Struts2框架的使用。
在Java中发送URL请求进行文件提交,通常我们会使用`HttpURLConnection`类来实现。以下是一段示例代码:
```java
private static void testSimulateFormToPostFile() {
String localPath = "F:\软件开发经验\DeleteNullDir.java";
File file = new File(localPath); // 本地文件
URL url = new URL("http://10.49.61.101:9999/finance/ajaxUploadFile.do"); // 服务器action地址
StringBuilder sb_cookie = null; // 拼装cookies
StringBuilder sb_body = null; // 报文体
HttpURLConnection httpUrl = null; // http协议类
OutputStream fos = null; // 文件流
FileInputStream fis = null; // 服务器回写响应流
try {
if (!file.exists()) {
throw new Exception();
}
// 初始化HTTP连接
httpUrl = (HttpURLConnection) url.openConnection();
httpUrl.setDoOutput(true); // 设置允许输出
httpUrl.setRequestMethod("POST"); // 设置请求方法为POST
httpUrl.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + "—————————7da2e53660");
// 创建输出流,准备写入文件数据
fos = httpUrl.getOutputStream();
// 构造请求体,包含文件内容
sb_body = new StringBuilder();
sb_body.append("--").append("—————————7da2e53660").append("\r\n");
sb_body.append("Content-Disposition: form-data; name=\"file\"; filename=\"").append(file.getName()).append("\"\r\n");
sb_body.append("Content-Type: application/octet-stream\r\n\r\n");
fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) != -1) {
fos.write(buffer, 0, length);
}
fis.close();
// 添加文件结束标识
sb_body.append("\r\n").append("--").append("—————————7da2e53660").append("--\r\n");
// 将请求体写入输出流
fos.write(sb_body.toString().getBytes());
// 发送请求
fos.flush();
// 处理响应
int responseCode = httpUrl.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
// 读取响应
BufferedReader br = new BufferedReader(new InputStreamReader(httpUrl.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
} else {
System.out.println("请求失败,状态码:" + responseCode);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException ignored) {}
}
if (httpUrl != null) {
httpUrl.disconnect();
}
}
}
```
这段代码首先创建了一个`File`对象表示要上传的本地文件,然后通过`URL`对象指定服务器接收文件的action地址。使用`HttpURLConnection`建立与服务器的连接,并设置为POST请求。为了上传文件,需要设置请求头的`Content-Type`为`multipart/form-data`,并指定分隔符用于区分不同部分的数据。
在构造请求体时,首先添加文件的边界标识,然后是文件内容的描述(包括文件名和类型),接着将文件内容写入输出流。最后,添加一个文件结束的边界标识。这样就构建了一个完整的POST请求体。
发送请求后,通过`getResponseCode()`检查服务器的响应状态,如果是HTTP_OK(200),则读取服务器返回的响应内容。如果出现异常或请求失败,会打印相应的错误信息。
在Struts2框架中,Action类会接收到这个POST请求。为了接收文件,Action类需要有一个对应字段,通常使用`@RequestParam`注解来指定。例如:
```java
public class UploadFileAction extends ActionSupport {
private File file;
private String fileName;
@Override
public String execute() throws Exception {
// 在这里处理文件,例如保存到服务器
// ...
return SUCCESS;
}
// getter和setter方法
public File getFile() { return file; }
public void setFile(File file) { this.file = file; }
public String getFileName() { return fileName; }
public void setFileName(String fileName) { this.fileName = fileName; }
}
```
在这个例子中,`file`字段将接收到上传的文件,`fileName`字段则保存文件名。在`execute()`方法内,你可以对文件进行处理,比如保存到服务器的某个目录下。
总结来说,Java中的文件上传通常涉及网络编程知识,如HTTP协议、流操作,以及Struts2等Web框架的使用。理解这些概念和技术对于开发支持文件上传功能的Web应用至关重要。
2020-10-27 上传
2012-09-17 上传
111 浏览量
363 浏览量
2017-06-14 上传
2019-05-28 上传
2012-07-16 上传
2020-08-30 上传
weixin_38732454
- 粉丝: 6
- 资源: 952
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍