文件上传java代码
时间: 2023-02-28 08:46:50 浏览: 64
我可以为您提供一些有用的参考:1. 文件上传应用程序的Java代码 - https://www.codejava.net/java-se/networking/upload-files-by-sending-multipart-request-programmatically2. Java文件上传的最佳实践 - https://www.baeldung.com/java-file-upload3. Java文件上传的详细指南 - https://www.javatpoint.com/java-file-upload
相关问题
写个文件上传java代码
### 回答1:
好的,这是一段用于上传文件的简单 Java 代码:
```
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String UPLOAD_DIR = "uploadedFiles";
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上传文件的目录
String uploadFilePath = request.getServletContext().getRealPath("") + File.separator + UPLOAD_DIR;
// 如果目录不存在则创建
File uploadFile = new File(uploadFilePath);
if (!uploadFile.exists()) {
uploadFile.mkdir();
}
// 解析请求的内容提取文件数据
@SuppressWarnings("unchecked")
List<Part> fileParts = (List<Part>) request.getParts();
// 上传文件
for (Part filePart : fileParts) {
String fileName = filePart.getSubmittedFileName();
if (fileName != null) {
String filePath = uploadFilePath + File.separator + fileName;
Path path = Paths.get(filePath);
Files.copy(filePart.getInputStream(), path);
}
}
}
}
```
这段代码演示了如何使用 HTTP POST 请求上传文件。
它将上传的文件存储在服务器的 "uploadedFiles" 目录中。如果该目录不存在,它会自动创建。
它使用了 Servlet 3.0 中的新特性 `javax.servlet.http.Part` 来解析请求内容,并使用 `java.nio.file.Files` 类的 `copy` 方法将上传的文件保存到服务器上。
### 回答2:
当编写文件上传Java代码时,可以使用Java的相关类库和方法来实现。以下是一个简单的文件上传代码示例:
```java
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLConnection;
import java.net.URL;
import java.nio.file.Files;
public class FileUploader {
public static void uploadFile(String fileUrl, String targetDirectory) throws IOException {
URL url = new URL(fileUrl);
URLConnection connection = url.openConnection();
String fileName = getFileName(url);
InputStream inputStream = connection.getInputStream();
OutputStream outputStream = new FileOutputStream(targetDirectory + File.separator + fileName);
byte[] buffer = new byte[8192];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
System.out.println("文件上传成功!");
}
private static String getFileName(URL url) {
String urlPath = url.getPath();
return urlPath.substring(urlPath.lastIndexOf("/") + 1);
}
public static void main(String[] args) {
String fileUrl = "https://example.com/example_file.jpg"; // 文件来源链接
String targetDirectory = "/path/to/target_directory"; // 目标保存路径
try {
uploadFile(fileUrl, targetDirectory);
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
上述代码中的`uploadFile`方法根据给定的文件URL和目标保存路径将文件保存到目标目录。`getFileName`方法用于从URL中提取文件名。`main`方法则用于测试文件上传功能。
使用此代码,只需将`fileUrl`和`targetDirectory`设置为相应的值,即可实现文件上传。在实际应用中,可以根据需要添加错误处理和输入验证等功能。
### 回答3:
当我们需要在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 FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置临时存储目录
String tempPath = "/temp";
// 设置上传文件存储目录
String uploadPath = "/upload";
// 创建一个DiskFileItemFactory对象
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置临时存储目录
factory.setRepository(new File(tempPath));
// 创建一个ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
try {
// 解析请求
List<FileItem> items = upload.parseRequest(request);
// 遍历FileItem列表
for (FileItem item : items) {
// 处理表单字段
if (item.isFormField()) {
String fieldName = item.getFieldName();
String fieldValue = item.getString("UTF-8");
// 处理表单字段的值
} else { // 处理上传文件
String fileName = item.getName(); // 获取文件名
// 可以根据需要进行文件保存等操作
File uploadedFile = new File(uploadPath + File.separator + fileName);
item.write(uploadedFile);
}
}
// 文件上传成功
response.getWriter().println("文件上传成功!");
} catch (Exception e) {
e.printStackTrace();
// 文件上传失败
response.getWriter().println("文件上传失败!");
}
}
}
```
上述代码使用了Apache Commons FileUpload库,首先需要在项目中导入对应的jar包。在代码中,我们首先设置了临时存储目录和上传文件存储目录,然后创建一个DiskFileItemFactory对象,并将临时存储目录设置给它。接下来,创建一个ServletFileUpload对象,并解析请求,获取FileItem列表。然后,我们遍历FileItem列表,判断每个FileItem是表单字段还是上传文件,并做出相应处理。对于上传文件,我们可以根据需要进行保存等操作。最后,根据上传结果返回相应的响应。
文件上传的java代码
以下是文件上传的Java代码示例:
```java
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.UUID;
public class FileUploader {
public static void upload(String url, String filePath) throws IOException {
File file = new File(filePath);
String boundary = UUID.randomUUID().toString();
URL uploadUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection) uploadUrl.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
String lineEnd = "\r\n";
String twoHyphens = "--";
// 开始写入文件
InputStream inputStream = new FileInputStream(file);
connection.getOutputStream().write((twoHyphens + boundary + lineEnd).getBytes());
connection.getOutputStream().write(("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"" + lineEnd).getBytes());
connection.getOutputStream().write(("Content-Type: application/octet-stream" + lineEnd + lineEnd).getBytes());
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
connection.getOutputStream().write(buffer, 0, length);
}
connection.getOutputStream().write((lineEnd + twoHyphens + boundary + twoHyphens + lineEnd).getBytes());
inputStream.close();
// 获取响应信息
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream responseStream = connection.getInputStream();
byte[] responseBuffer = new byte[1024];
int responseLength;
while ((responseLength = responseStream.read(responseBuffer)) != -1) {
System.out.println(new String(responseBuffer, 0, responseLength));
}
responseStream.close();
} else {
System.out.println("上传失败,错误码:" + responseCode);
}
connection.disconnect();
}
}
```
使用示例:
```java
public static void main(String[] args) {
try {
FileUploader.upload("http://localhost:8080/upload", "/path/to/file");
} catch (IOException e) {
e.printStackTrace();
}
}
```
其中 `http://localhost:8080/upload` 是文件上传接口的 URL,`/path/to/file` 是文件路径。