Java 文件上传示例代码:使用 HttpURLConnection 实现文件上传
以下是一个简单的文件上传的Java代码示例,使用 Java 标准库的 java.net 和 java.io 包,通过 HttpURLConnection 类实现文件上传。
import java.io.*;
import java.net.*;
import java.util.*;
public class FileUploader {
public static void main(String[] args) throws Exception {
String fileToUpload = 'path/to/file.txt';
String uploadUrl = 'http://example.com/upload.php';
File file = new File(fileToUpload);
String boundary = '===' + System.currentTimeMillis() + '===';
String lineEnd = '\r\n';
HttpURLConnection conn = (HttpURLConnection) new URL(uploadUrl).openConnection();
conn.setDoOutput(true);
conn.setRequestMethod('POST');
conn.setRequestProperty('Content-Type', 'multipart/form-data; boundary=' + boundary);
OutputStream outputStream = conn.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream, 'UTF-8'), true);
writer.append('--' + boundary).append(lineEnd);
writer.append('Content-Disposition: form-data; name="file"; filename="' + file.getName() + '"').append(lineEnd);
writer.append('Content-Type: ' + URLConnection.guessContentTypeFromName(file.getName())).append(lineEnd);
writer.append('Content-Transfer-Encoding: binary').append(lineEnd);
writer.append(lineEnd);
writer.flush();
FileInputStream inputStream = new FileInputStream(file);
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.flush();
inputStream.close();
writer.append(lineEnd);
writer.flush();
writer.append('--' + boundary + '--').append(lineEnd);
writer.close();
outputStream.close();
int responseCode = conn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
//文件上传成功
} else {
//文件上传失败
}
conn.disconnect();
}
}
在这个示例中,fileToUpload是要上传的文件路径,uploadUrl是上传的目标URL。在HttpURLConnection对象中,我们使用了POST方法并设置了Content-Type为multipart/form-data,这是HTTP协议中常用的文件上传方式。我们通过PrintWriter类将文件数据写入输出流中,并使用FileInputStream读取文件数据。最后,我们检查HTTP响应码,如果返回的是HTTP_OK,则表示文件上传成功。
代码说明:
boundary: 用于区分上传文件和表单数据的边界字符串。lineEnd: 用于表示换行符。HttpURLConnection: 用于建立HTTP连接,并发送HTTP请求。Content-Type: 设置为multipart/form-data,表示使用多部分表单数据上传文件。PrintWriter: 用于将文件数据写入输出流。FileInputStream: 用于读取文件数据。responseCode: 用于检查HTTP响应码,判断文件上传是否成功。
更多优化:
- 可以使用第三方库,如Apache Commons FileUpload,简化文件上传操作。
- 可以添加异常处理机制,提高代码健壮性。
- 可以根据具体需求,添加进度条、文件大小限制等功能。
原文地址: https://www.cveoy.top/t/topic/lYZ8 著作权归作者所有。请勿转载和采集!