我想要做的是用户上传他的文件,我会将这个文件存储到我的服务器端
重要提示:我只能使用“servlet-api.jar(2.4版本)”,不能使用其他JAR!
我使用
<form action=\"/Mapreduce/upload\" method=\"POST\" enctype=\"multipart/form-data\">
上传我的文件。
然后我使用此代码
InputStream whole = request.getInputStream();
来获取整个输入流。
然后我使用这段代码来获取文件内容的字符串
BufferedReader br = new BufferedReader(new InputStreamReader(whole, "UTF-8"));
while ((line = br.readLine()) != null) {
sb.append(line);// sb is stringbuilder here
}
然后,我将从 stringbuilder 获得的字符串转换为 InputStream:
InputStream is = new ByteArrayInputStream(result.getBytes("UTF-8""));
最后,我使用以下代码将
InputStream is
写入另一个文件(临时):
OutputStream outputStream = new FileOutputStream(temp);// temp is a file.
int read = 0;
byte[] bytes = new byte[1024];
while ((read = is.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
当我上传 .txt 文件时,它可以工作,我可以打开 temp.txt。但是,当我上传 .docx 文件时,无法打开 temp.docx。我怎么解决这个问题?是不是我的编码错误?
你不需要做那么多事情。你可以像下面这样做:
index.html
<html>
<body>
<form action="go" method="post" enctype="multipart/form-data"> //here go is path for servelet
Select File:<input type="file" name="fname"/><br/>
<input type="submit" value="upload"/>
</form>
</body>
</html>
UploadServlet.java
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import com.oreilly.servlet.MultipartRequest;
public class UploadServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
MultipartRequest m=new MultipartRequest(request,"d:/new"); //d is directory to upload file
out.print("successfully uploaded");
}
}
web.xml 文件
<web-app>
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/go</url-pattern>
</servlet-mapping>
</web-app>
并从链接下载cos.jar文件:http://ftp.java2s.com/Code/Jar/c/Downloadcosmultipartjar.htm。并将其放入您的类路径中。
您可以将 Servlet 代码编写为,
Part filepart=request.getPart("file");
System.out.println(filepart);
String filename=null;
if(filepart!=null){
System.out.println("IF filepart not null");
System.out.println(filepart.getName());
System.out.println(filepart.getContentType());
System.out.println(filepart.getSize());
System.out.println(filepart.getInputStream());
String contentDisp = filepart.getHeader("content-disposition");
System.out.println("content-disposition header= "+contentDisp);
String[] tokens = contentDisp.split(";");
for (String token : tokens) {
if (token.trim().startsWith("filename"))
System.out.println(token.substring(token.indexOf("=") + 2, token.length()-1));
filename=token.substring(token.indexOf("=") + 2, token.length()-1);
System.out.println("File Name New is: " +filename);
}
}
InputStream inputstream=null;
if(filepart!=null)
{
inputstream=filepart.getInputStream();
System.out.println("File data: " +inputstream);
}
在这里您可以获取上传文件的文件名和内容,在此代码之后您可以编写用于将文件存储在数据库或系统中的代码。