使用Java写一个上传文件代码
时间: 2023-09-10 19:05:22 浏览: 118
### 回答1:
可以参考下面的代码:try {
// 创建一个URL对象
URL url = new URL(urlString);
// 创建一个HttpURLConnection
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
// 设置连接超时
httpConn.setConnectTimeout(3000);
// 设置读取超时
httpConn.setReadTimeout(3000);
// 设置POST方式
httpConn.setRequestMethod("POST");
// 设置是否向HttpURLConnection输出
httpConn.setDoOutput(true);
// 设置是否从HttpURLConnection读入
httpConn.setDoInput(true);
// 设置是否使用缓存
httpConn.setUseCaches(false);
// 设置请求头信息
httpConn.setRequestProperty("Connection", "Keep-Alive");
httpConn.setRequestProperty("Charset", "UTF-8");
// 设置边界
String BOUNDARY = "----------" + System.currentTimeMillis();
httpConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
// 建立输出流,并写入数据
OutputStream out = new DataOutputStream(httpConn.getOutputStream());
// 写入上传的文件
// 参数1:文件参数名,参数2:文件名,参数3:文件类型
StringBuilder sb = new StringBuilder();
sb.append("--");
sb.append(BOUNDARY);
sb.append("\r\n");
sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + fileName + "\"\r\n");
sb.append("Content-Type:application/octet-stream\r\n\r\n");
byte[] head = sb.toString().getBytes("utf-8");
out.write(head);
DataInputStream in = new DataInputStream(new FileInputStream(file));
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
in.close();
// 写入结尾字符
byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");
out.write(foot);
out.flush();
out.close();
// 读取响应
StringBuffer buffer = new StringBuffer();
BufferedReader reader = null;
try {
// 定义BufferedReader输入流来读取URL的响应
reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
reader.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
### 回答2:
在Java中,我们可以使用Apache Commons FileUpload库来实现上传文件的功能。以下是一个示例代码:
```java
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class UploadFileServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 检查是否为文件上传表单
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
// 创建临时文件存储目录
File tempDir = new File("temp");
if (!tempDir.exists()) {
tempDir.mkdir();
}
try {
// 创建DiskFileItemFactory对象,用于配置上传组件的临时文件位置和大小阈值
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(tempDir);
factory.setSizeThreshold(1024 * 1024 * 2); // 2MB
// 创建ServletFileUpload对象,并设置文件上传大小限制
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1024 * 1024 * 10); // 10MB
// 解析请求,并获取所有文件项
List<FileItem> items = upload.parseRequest(request);
// 遍历文件项进行处理
for (FileItem item : items) {
if (!item.isFormField()) { // 判断是否为普通表单字段
// 获取文件名
String fileName = item.getName();
// 将文件保存至指定位置
item.write(new File("upload/" + fileName));
}
}
response.getWriter().write("文件上传成功!");
} catch (Exception e) {
response.getWriter().write("文件上传失败!" + e.getMessage());
}
} else {
response.getWriter().write("请提交文件上传表单!");
}
}
}
```
上述代码使用了Apache Commons FileUpload库来处理文件上传。当用户提交的请求为multipart/form-data类型时,即文件上传表单时,代码会:
1. 创建一个临时文件存储目录。
2. 配置文件上传组件的临时文件位置和大小阈值。
3. 创建ServletFileUpload对象,并设置文件上传大小限制。
4. 解析请求,获取所有文件项。
5. 遍历文件项进行处理,将文件保存至指定位置。
6. 返回上传成功或失败的信息给用户。
### 回答3:
使用Java编写一个上传文件的代码可以通过以下步骤实现:
1. 创建一个Java类,例如FileUploader,包含一个main方法。
```java
public class FileUploader {
public static void main(String[] args) {
// 在这里执行上传文件的代码
}
}
```
2. 导入所需的Java包,包括java.io和java.net。
```java
import java.io.*;
import java.net.*;
```
3. 使用URL和URLConnection类连接到服务器并打开输出流。
```java
URL url = new URL("http://example.com/upload"); // 上传文件的URL
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
```
4. 创建一个File对象,指定要上传的文件的路径。
```java
File file = new File("path/to/file.jpg"); // 替换为实际文件的路径
```
5. 创建一个FileInputStream对象,用于读取文件内容。
```java
FileInputStream inputStream = new FileInputStream(file);
```
6. 获取输出流,并将文件内容写入到输出流中。
```java
OutputStream outputStream = connection.getOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
```
7. 获取服务器的响应结果。
```java
int responseCode = connection.getResponseCode();
String responseMessage = connection.getResponseMessage();
```
8. 关闭连接。
```java
connection.disconnect();
```
完成以上步骤后,就可以使用Java写一个简单的文件上传代码了。记得替换实际的上传文件URL和文件路径,以及根据需要添加异常处理。
阅读全文