0

ファイルをサーバーにアップロードし、パラメーターを送信します。しかし、私には2つの問題があります。

1パラメータを送信できません。そうです:

      handler: function(){
        mapinfo="mapinfo";
        formp.getForm().submit({
        url: url_servlet+'uploadfile',
        params: {file_type: mapinfo},
        success: function(formp, o) {
           alert(o.result.file);
           kad_tab.getStore().reload()
           zoom_store.load();
        }
    })
}

そしてサーバー側:

public class uploadfile extends HttpServlet implements Servlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, java.io.IOException {
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html");
    String st = request.getParameter("file_type");
    PrintWriter writer = response.getWriter();
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    if (!isMultipart) {
            return;
        }          
  FileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);
    List<FileItem> list=null;
    String mifpath= "1";
    String path = " ";
    String mif = " ";
    String from = "\\\\";
    String to ="/";
    String error="";
     try{
      list = upload.parseRequest(request);
      Iterator<FileItem> it = list.iterator();
      response.setContentType("text/html");
      while ( it.hasNext() ) 
      {

        FileItem item = (FileItem) it.next();
        File disk = new File("C:/uploaded_files/"+item.getName());

            path = disk.toString();
            String code = new String(path.substring(path.lastIndexOf("."), path.length()).getBytes("ISO-8859-1"),"utf-8");
            if (code.equalsIgnoreCase(".zip"))
            {
                mifpath=path;
                mif = mifpath.replaceAll(from, to);
                item.write(disk);
                //error=unzip.unpack(mif, "C:/uploaded_files");
            }
            else
            {
                error = "Выбранный файл не является архивом zip";

            }
      }
    }

     catch ( Exception e ) {
      log( "Upload Error" , e);
    }
     System.out.println("st="+st);
    writer.println("{success:true, file:'"+error+"'}");
    writer.close();
}
}

しかし、コンソールでは。のみを取得しst=nullます。

2 fileuploadpanelでコンボボックスを使用できません:

var x = new Ext.Window({
                                title:'Загрузка файла',
                                items:[
                                    formp = new Ext.FormPanel({
                                        fileUpload: true,
                                        width: 350,
                                        autoHeight: true,
                                        bodyStyle: 'padding: 10px 10px 10px 10px;',
                                        labelWidth: 70,
                                        defaults: {
                                            anchor: '95%',
                                            allowBlank: false,
                                            msgTarget: 'side'
                                        },
                                        items:[{
                                    xtype:"combo",
                                    fieldLabel:'Тип файла ',
                                    name:"cb_file",
                                    id:"cb_file",
                                    mode:"local",
                                    typeAhead: false,
                                    loadingText: 'Загрузка...',
                                    store:new Ext.data.SimpleStore({
                                        fields: ['file_name', 'file_type'],
                                            data : [['*.MIF/MID', 'mif'],['*.GPX', 'gpx']]
                                        }),
                                    forceSelection:true,
                                    emptyText:'выбирите тип...',
                                    triggerAction:'all',
                                    valueField:'file_type',
                                    displayField:'file_name',
                                    anchor:'60%'
                                },{
                                            xtype: 'fileuploadfield',
                                            id: 'filedata',
                                            emptyText: 'Выберите файл для загрузки...',
                                            fieldLabel: 'Имя файла',
                                            buttonText: 'Обзор'
                                        }],
                                        buttons: [{
                                            text: 'Загрузить',
                                            handler: function(){
                                                mapinfo="mapinfo";
                                                    formp.getForm().submit({
                                                        url: url_servlet+'uploadfile',
                                                        params: {file_type: mapinfo},

                                                        success: function(formp, o) {

                                                            alert(o.result.file);


                                                            kad_tab.getStore().reload()
                                                            zoom_store.load();
                                                            }
                                                    })
                                            }
                                        }]
                                    })
                                ]   
                             })
                             x.show();

サーバー側でこれを行うと、何も機能しません。たとえば、zipアーカイブではないものをアップロードすると、zipファイルではないという警告が表示されますが、取得できません。パネルにコンボボックスを追加しないと、このアラートが表示されます。どうしたの?

4

1 に答える 1

1

これは、リクエストがマルチパートのものであるためです。次に、次を使用してパラメータを読み取ることはできません。String st = request.getParameter( "file_type");

なぜならそれは常にnullになるからです。代わりに、次のスニペットを使用してください。

List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
    FileItem item = (FileItem) iter.next();

    if (item.isFormField()) {
        processFormField(item);
    } else {
        processUploadedFile(item);
    }
}

あなたの2番目の質問について、私はそれを理解できませんでした。

于 2012-08-30T04:07:57.207 に答える