簡體   English   中英

Java Commons文件上傳,大小,存儲庫

[英]Java Commons File Upload, size, repository

我的問題是setSizeThreshold和setRepository如何工作。

如果我錯了,請糾正我,我的理解是,如果文件大小> setSizeThreshold(無論是多少),那么它將文件發送到臨時存儲的setRepository。 但是我從未見過此文件存儲在setRepository(filePath)中。 我沒有setFileCleaningTracker,因此從技術上講文件仍應位於setRepository(filePath)中嗎?

  1. 如何測試存儲庫是否正常工作? 有辦法嗎?

這是我的代碼,一切都來自doc,沒什么特別的。

boolean isMultipart = ServletFileUpload.isMultipartContent(request);

    if(isMultipart){

        // Create a factory for disk-based file items
        DiskFileItemFactory factory = new DiskFileItemFactory();

        // Set factory constraints
        factory.setSizeThreshold(20480);   // purposely make it small to test
        factory.setRepository(new File(root + "tempFile"));

        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload(factory);

        //upload.setSizeMax(20480);    //  This makes the upload stop

        try
        {
            // Parse the request
            List<FileItem> items = upload.parseRequest(request);

            // Process the uploaded items
            Iterator<FileItem> i = items.iterator();

            while(i.hasNext())
            {

                FileItem item = i.next();

                //request.setAttribute("item", item);

                if(item.isFormField()){
                    String fieldName = item.getFieldName();
                    String fieldValue = item.getString();

                    out.println(fieldName + ": " + fieldValue);
                }
                else
                {
                    String fieldName = item.getFieldName();
                    String fileName = item.getName();
                    String contentType = item.getContentType();
                    boolean isInMemory = item.isInMemory();
                    long sizeInBytes = item.getSize();

                    File name = new File(item.getName());

                    // File.separator:  "/"
                    item.write( new File(root + "uploads" + File.separator + name));


                }


            }  

        } catch (FileUploadException ex)
        {
            ex.printStackTrace();
        } catch (Exception ex)
        {
            Logger.getLogger(uploadFileServlet.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

在文檔中

Larger items should be written to a temporary file on disk.

Very large upload requests should not be permitted.

  1. 什么是“非常大”? 什么尺寸被認為非常大?

提前致謝...

public class NServletController extends HttpServlet {
    private static final long serialVersionUID = 1L;

    //private boolean isMultipart;
    private String FilePath;
    private File file;
    private String Address="";
    private String Telephone="";
    private String Email="";
    private String MobileNumber="";
    private String Name ="";
    private String Workdetails="";
    private String AccountName="";
    private String BankName="";
    private String  Accountnumber="";
    private String  BranchName="";
    private String Ifsdetails="";
    private String  Pannumber="";
    //private String submit="";
    private String filename="";
    FileInputStream fis=null;
    //  private String name="";
    private int rs1 = 0; 
    private String r="";
    private int rs3=0;
    String filePath = "E:\\Myuploads\\";






    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub

        PrintWriter out = response.getWriter();

        boolean isMultipartContent = ServletFileUpload.isMultipartContent(request);

        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        try {
            List<FileItem> fields = upload.parseRequest(request);
            Iterator<FileItem> it = fields.iterator();
            if (!it.hasNext()) {

                return;
            }
            while (it.hasNext()) {
                FileItem fileItem = it.next();
                boolean isFormField = fileItem.isFormField();

                if (isFormField && fileItem.getFieldName().equals("name")) {
                    Name=fileItem.getString();
                }
                else if(isFormField && fileItem.getFieldName().equals("address"))
                {
                    Address = fileItem.getString();
                }
                else if(isFormField && fileItem.getFieldName().equals("email"))
                {
                    Email = fileItem.getString();
                }
                else if(isFormField && fileItem.getFieldName().equals("mobileno"))
                {
                    MobileNumber = fileItem.getString();
                }
                else if(isFormField && fileItem.getFieldName().equals("telephone"))
                {
                    Telephone = fileItem.getString();
                }
                else if(isFormField && fileItem.getFieldName().equals("work"))
                {
                    Workdetails= fileItem.getString();
                }
                else if(isFormField && fileItem.getFieldName().equals("accountholdername"))
                {
                    AccountName = fileItem.getString();
                }
                else if(isFormField && fileItem.getFieldName().equals("bankname"))
                {
                    BankName = fileItem.getString();
                }
                else if(isFormField && fileItem.getFieldName().equals("accountno"))
                {
                    Accountnumber = fileItem.getString();
                }
                else if(isFormField && fileItem.getFieldName().equals("branchname"))
                {
                    BranchName = fileItem.getString();
                }
                else if(isFormField && fileItem.getFieldName().equals("ifsccode"))
                {
                    Ifsdetails = fileItem.getString();
                }
                else if(isFormField && fileItem.getFieldName().equals("pannumber"))
                {
                    Pannumber = fileItem.getString();
                }
                else if(isFormField && fileItem.getFieldName().equals("submit"))
                {
                    String submit = fileItem.getString();
                }
                else   {
                    filename = FilenameUtils.getName(fileItem.getName());


                    OutputStream outputStream = new FileOutputStream(filename);
                    InputStream inputStream = fileItem.getInputStream();
                    int readBytes = 0;
                    byte[] buffer = new byte[10000];
                    while ((readBytes = inputStream.read(buffer, 0, 10000)) != -1) {
                        outputStream.write(buffer, 0, readBytes);
                    }
                    if(fileItem.getName()!= null){
                        //   out.println("<td><img width='100' heigth='100' src="+ request.getContextPath() + "/images/"+ fileItem.getName() + "></td>");

                        if (filename.lastIndexOf("\\") >= 0) {
                            file = new File(filePath
                                    + filename.substring(filename
                                            .lastIndexOf("\\")));
                        } else {
                            file = new File(filePath
                                    + filename.substring(filename
                                            .lastIndexOf("\\") + 1));
                        }
                        fileItem.write(file);
                    }                                       
                }
            }   
        }catch(Exception e)
        {
            e.printStackTrace();
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM