gpt4 book ai didi

rest - GWT 文件上传到 REST 网络服务

转载 作者:行者123 更新时间:2023-12-02 03:51:24 26 4
gpt4 key购买 nike

我想使用 GWT 将文件上传到 REST 网络服务。但是我在以下这些字段中得到了空值。

InputStream uploadedInputStream, FormDataContentDisposition fileDetail

以下是我的 GWT 客户端代码

public void onModuleLoad() {
Button button = new Button("Click Here");
final FormPanel form = new FormPanel();
final FileUpload fileUpload = new FileUpload();
form.setMethod(FormPanel.METHOD_POST);
form.setEncoding(FormPanel.ENCODING_MULTIPART);
fileUpload.setName("upload");
form.add(fileUpload);
form.setAction("http://localhost:8080/RestWeb/webresources/generic/upload");
RootPanel.get().add(form);
RootPanel.get().add(button);
button.addClickHandler(new ClickHandler() {

@Override
public void onClick(ClickEvent event) {
System.out.println(fileUpload.getFilename());
System.out.println(fileUpload.getName());
System.out.println(fileUpload.getStyleName());
fileUpload.setEnabled(true);

System.out.println(form.getTarget());
form.submit();
}
});
form.addSubmitHandler(new SubmitHandler() {

@Override
public void onSubmit(SubmitEvent event) {
Window.alert("Onsubmit");

}
});
form.addSubmitCompleteHandler(new SubmitCompleteHandler() {

@Override
public void onSubmitComplete(SubmitCompleteEvent event) {
Window.alert("OnsubmitComplete"+event.getResults());

}
});
}
}

以下是我的服务器端代码。我在客户端和服务器之间建立了连接,但只得到了空值。我不明白我的错误。我引用了很多网站,但我得到了相同的代码。

@Path("generic")
@WebService
public class GenericResource {

@Context
private UriInfo context;
@Context
private HttpServletResponse response;
private String content = "content";

/**
* Creates a new instance of GenericResource
*/
public GenericResource() {
}
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)

public Response uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) {

String uploadedFileLocation = "C://Users/SPC/Parvathy/upload" + fileDetail.getFileName();

// save it
writeToFile(uploadedInputStream, uploadedFileLocation);

String output = "File uploaded to : " + uploadedFileLocation;

return Response.status(200).entity(output).build();

}

// save uploaded file to new location
private void writeToFile(InputStream uploadedInputStream,
String uploadedFileLocation) {

try {
OutputStream out = new FileOutputStream(new File(
uploadedFileLocation));
int read = 0;
byte[] bytes = new byte[1024];

out = new FileOutputStream(new File(uploadedFileLocation));
while ((read = uploadedInputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
out.close();
} catch (IOException e) {

e.printStackTrace();
}
}
}

public class CorsFilter extends OncePerRequestFilter {

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
// CORS "pre-flight" request
response.addHeader("Content-Type",
"multipart/form-data");
response.addHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8888");
response.addHeader("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTIONS");
response.addHeader("Access-Control-Allow-Headers","origin, access-control-allow-methods, content-type, access-control-allow-origin, access-control-allow-headers");
response.addHeader("Access-Control-Max-Age", "1800");//30 min
// }
filterChain.doFilter(request, response);
}
}

请帮帮我。提前致谢。

最佳答案

试试这个。在您的 GWT 代码中,您正在使用 FileUpload 类。名称是 upload。因此 GWT 将生成一个名称为 upload(检查您的 html 源以确认) 的输入字段。因此,当您提交表格时,浏览器将字段作为具有相同名称的参数发送。在您的网络服务中,您必须捕获具有相同名称的参数..像这样更改您的代码

 public Response uploadFile(
@FormDataParam("upload") InputStream uploadedInputStream,
@FormDataParam("upload") FormDataContentDisposition fileDetail) {


}

关于rest - GWT 文件上传到 REST 网络服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14272520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com