Java模拟表单提交文件到Struts2 Action处理
48 浏览量
更新于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 上传
2023-06-09 上传
2023-04-28 上传
2023-09-09 上传
2023-04-01 上传
2023-08-21 上传
2023-05-23 上传
2024-04-07 上传
weixin_38732454
- 粉丝: 6
- 资源: 952
最新资源
- 十种常见电感线圈电感量计算公式详解
- 军用车辆:CAN总线的集成与优势
- CAN总线在汽车智能换档系统中的作用与实现
- CAN总线数据超载问题及解决策略
- 汽车车身系统CAN总线设计与应用
- SAP企业需求深度剖析:财务会计与供应链的关键流程与改进策略
- CAN总线在发动机电控系统中的通信设计实践
- Spring与iBATIS整合:快速开发与比较分析
- CAN总线驱动的整车管理系统硬件设计详解
- CAN总线通讯智能节点设计与实现
- DSP实现电动汽车CAN总线通讯技术
- CAN协议网关设计:自动位速率检测与互连
- Xcode免证书调试iPad程序开发指南
- 分布式数据库查询优化算法探讨
- Win7安装VC++6.0完全指南:解决兼容性与Office冲突
- MFC实现学生信息管理系统:登录与数据库操作