写个文件上传的java代码
时间: 2023-08-31 21:34:37 浏览: 100
### 回答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 javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class FileUploadController {
private static String UPLOAD_FOLDER = "upload-dir/";
@PostMapping("/upload")
public String fileUpload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
if (file.isEmpty()) {
return "Please select a file to upload.";
}
try {
byte[] bytes = file.getBytes();
Path path = Paths.get(UPLOAD_FOLDER + file.getOriginalFilename());
Files.write(path, bytes);
return "Successfully uploaded '" + file.getOriginalFilename() + "'";
} catch (IOException e) {
e.printStackTrace();
return "Failed to upload '" + file.getOriginalFilename() + "'";
}
}
}
```
这是一个简单的文件上传代码。它使用了 Spring MVC 框架,并在 `fileUpload` 方法中使用了 `MultipartFile` 对象来接收上传的文件。代码将文件保存在 "upload-dir/" 目录下。
### 回答2:
以下是一个基本的文件上传的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.ServerSocket;
import java.net.Socket;
public class FileUploader {
private static final int PORT = 8888; // 设置服务器端口号
private static final String SAVE_DIRECTORY = "C:\\uploads"; // 设置文件保存目录
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("服务器在端口 " + PORT + " 监听...");
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("客户端连接成功!");
// 通过线程处理文件上传请求
Thread thread = new UploadHandler(clientSocket);
thread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static class UploadHandler extends Thread {
private Socket clientSocket;
public UploadHandler(Socket clientSocket) {
this.clientSocket = clientSocket;
}
@Override
public void run() {
try {
InputStream inputStream = clientSocket.getInputStream();
byte[] buffer = new byte[8192];
int bytesRead;
String fileName = Long.toString(System.currentTimeMillis()); // 使用时间戳作为文件名
File outputFile = new File(SAVE_DIRECTORY, fileName);
OutputStream outputStream = new FileOutputStream(outputFile);
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
clientSocket.close();
System.out.println("文件上传成功:" + outputFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
这段代码创建了一个服务器端Socket,监听8888端口,当有客户端连接时,会启动一个新的线程处理文件上传请求。上传的文件将会保存到指定的目录中,并以时间戳作为文件名。你可以根据需要修改端口号和保存目录。
### 回答3:
下面是一个简单的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.ServerSocket;
import java.net.Socket;
public class FileUploader {
public static void main(String[] args) {
int port = 12345; // 定义监听端口号
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("等待客户端连接...");
while (true) {
Socket socket = serverSocket.accept(); // 等待客户端连接
// 创建新线程处理客户端请求
Thread thread = new Thread(() -> {
try {
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = new FileOutputStream("保存路径/文件名"); // 设置文件保存路径和文件名
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) { // 读取客户端上传的文件并写入到输出流中
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
System.out.println("文件上传成功!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
thread.start(); // 启动线程
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
上述代码通过创建一个ServerSocket实例,监听指定端口号,等待客户端连接。一旦有客户端连接,就会创建一个新的线程处理文件上传请求。在该线程中,首先获取Socket的输入流,然后创建一个文件输出流,将客户端上传的文件写入到指定的文件路径中。最后关闭流和Socket连接。
需要注意的是,你需要将代码中的"保存路径/文件名"替换为你希望保存文件的实际路径和文件名。另外,该代码只是一个简单的示例,没有进行错误处理和其他优化。在实际的应用中,你可能需要添加额外的代码来处理异常、验证文件类型或大小,并进行安全性的考虑。
阅读全文