Java模拟表单提交文件到Struts2 Action处理
155 浏览量
更新于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 上传
2017-12-05 上传
2023-06-09 上传
2023-04-28 上传
2023-09-09 上传
2023-04-01 上传
2023-08-21 上传
2023-05-23 上传
weixin_38732454
- 粉丝: 6
- 资源: 952
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍