在servlet中上传文件

时间:2012-10-25 07:37:28

标签: java servlets file-upload glassfish

我需要在我的服务器上存储cad个文件,但我无法让上传工作。我试着让这个工作几个小时,但我不能。我有这个。 这给了我一个错误

随机数 .temp不存在( java.io.FileNotFoundException: /home/nick/.netbeans/7.1.2/config/GF3_1/domain1/generated/jsp/lrt/upload_700679fb_13a96c78523__7ffb_00000006.tmp (No such file or directory )

package Admin;

import java.io.IOexception;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@WebServlet(name = "UploadServlet", urlPatterns = {"/UploadServlet"})
@MultipartConfig
public class UploadServlet extends HttpServlet {

    @Override
     protected void doPost(HttpServletRequest request, 
       HttpServletResponse responst) throws ServletException, IOException {
      Collection<Part> parts = request.getParts();
      if (parts.size() != 3) {
         //can write error page saying all details are not entered
      }
       Part filePart = request.getPart("cad");
       InputStream sInputStream = filePart.getInputStream();
       //read imageInputStream
       filePart.write(filePart.getName());
       //Read Name, String Type 
       Part namePart = request.getPart("cad");
       if(namePart.getSize() > 20){
           //write name cannot exceed 20 chars
       }
       //use nameInputStream if required        
       InputStream nameInputStream = namePart.getInputStream();
       //name , String type can also obtained using Request parameter 
       String nameParameter = request.getParameter("name");
       //Similarly can read age properties
       Part agePart = request.getPart("age");
       int ageParameter = Integer.parseInt(request.getParameter("age"));
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }
}

1 个答案:

答案 0 :(得分:2)

找不到代表上传文件的临时文件。

路径表明它存储在Netbeans项目文件夹中的Glassfish工作文件夹中。也许在Netbeans内部有一些激进的清理/热部署,临时文件过早被扫描?或者也许只有不充分的写权利?这取决于抛出异常的方式和位置的背景 - 从你的问题中不清楚。

首先,我建议告诉@MultipartConfig将临时文件存储在一个不同的,更永久和可写的location中。例如,

@MultipartConfig(location="/var/webapp/temp")