4

Jersey を使用した複数のファイルのアップロードについてサポートが必要です。次のコードを使用して、Jersey を使用して単一のファイルをアップロードしました。

package my.first.rest;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;



import com.sun.jersey.core.header.FormDataContentDisposition;
import com.sun.jersey.multipart.FormDataParam;

@Path("uploadfile")
public class Upload {
String location;



    @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public  String uploadfile(@FormDataParam("file") InputStream is, @FormDataParam("file") FormDataContentDisposition filedetail){



        saveToDisk(is,filedetail);
        return  "File Uploaded Succesfully_"+location;

    }


    private void saveToDisk(InputStream is1,
            FormDataContentDisposition filedetail) {
        // TODO Auto-generated method stub

         location = "E://upload/"+filedetail.getFileName();
        try{
            OutputStream out = new FileOutputStream(new File(location));
            int read = 0;
            byte[] bytes = new byte[1024];
            out = new FileOutputStream (new File(location));
            while((read = is1.read(bytes)) != -1){
                out.write(bytes,0,read);
            }
            out.flush();

            out.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }


}

上記のコードは 1 つのファイルのアップロードでうまく機能しますが、input type = file タグに multiple="multiple" 属性を追加すると、1 回のアップロードで複数のアイテムを選択できるようになり、最初に選択したアイテムがアップロードされ、最後に選択したアイテムの名前。複数のファイルのアップロードを処理するためのものではなかったので、コードが機能するとは思っていませんが、それを回避する方法が必要ですよね?? それ以来、1 つのファイルと別のファイルの名前を取得しています。

私は複数のスタックオーバーフロースレッドを見て、たくさんグーグルで検索しました。もし私が答えを見つけていたら、私はこれを投稿しなかったでしょう。以下のタイプのコードを使用して複数のファイルをアップロードするつもりはありません。

<input type ="file" name="file">
<input type ="file" name="file">
<input type ="file" name="file2">

複数のファイルを個別にアップロードしたくありません。一度に複数のファイルを選択し、それらすべてをどこかにアップロードできるようにしたいと考えています。私のタグは次のようなものです:

<input type ="file" name="file" multiple="multiple">

HTML コード全体を次に示します。

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action ="http://localhost:8080/fuseframework/uploadfile/upload" method="post" enctype="multipart/form-data">
file: 
<br>
<input type ="file" name="file" multiple="multiple">

<input type="submit" value="send">
</form>
</body>
</html>

これらは私が使用したjarです http://i.stack.imgur.com/1tVT8.png

4

3 に答える 3

10

このことは私にとってかなりうまくいきました:

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void uploadMultiple(@FormDataParam("file") FormDataBodyPart body){
    for(BodyPart part : body.getParent().getBodyParts()){
        InputStream is = part.getEntityAs(InputStream.class);
        ContentDisposition meta = part.getContentDisposition();
        doUpload(is, meta);
    }
}
于 2015-12-06T20:32:44.940 に答える
0

この回答では、タイプが FormDataBodyPart の場合、「ファイル」を @FormDataParam として @BeanParam クラスに追加することもできます。FormDataMultiPart は、リクエストのパラメーターとしてのみビルドされ、サブクラスによって継承された場合はビルドされません。

于 2021-07-22T16:54:44.940 に答える