Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将文件从Android上传到Tomcat_Java_Upload_Jersey - Fatal编程技术网

Java 将文件从Android上传到Tomcat

Java 将文件从Android上传到Tomcat,java,upload,jersey,Java,Upload,Jersey,我正在尝试从ApacheTomcat Web服务器中的android设备接收上传。android的代码似乎是正确的,但是我在服务器端处理数据时遇到了问题 这是客户: public String uploadStorageFile(String appId, String pathToFile) { HttpURLConnection connection = null; DataOutputStream outputStream = null; DataInputStre

我正在尝试从ApacheTomcat Web服务器中的android设备接收上传。android的代码似乎是正确的,但是我在服务器端处理数据时遇到了问题

这是客户:

public String uploadStorageFile(String appId, String pathToFile) {
    HttpURLConnection connection = null;
    DataOutputStream outputStream = null;
    DataInputStream inputStream = null;
    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary =  "*****";

    String storageUrl = url + "/" + appId + "/storage";
    int bytesRead, bytesAvailable, bufferSize;
    byte[] buffer;
    int maxBufferSize = 1*1024*1024;
    String serverResponseMessage = null;
    try
    {
    FileInputStream fileInputStream = new FileInputStream(new File(pathToFile) );

    URL url = new URL(storageUrl);
    connection = (HttpURLConnection) url.openConnection();

    // Allow Inputs & Outputs
    connection.setDoInput(true);
    connection.setDoOutput(true);
    connection.setUseCaches(false);

    // Enable POST method
    connection.setRequestMethod("POST");

    connection.setRequestProperty("Connection", "Keep-Alive");
    connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);

    outputStream = new DataOutputStream( connection.getOutputStream() );
    outputStream.writeBytes(twoHyphens + boundary + lineEnd);
    outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToFile +"\"" + lineEnd);
    outputStream.writeBytes(lineEnd);

    bytesAvailable = fileInputStream.available();
    bufferSize = Math.min(bytesAvailable, maxBufferSize);
    buffer = new byte[bufferSize];

    // Read file
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);

    while (bytesRead > 0)
    {
    outputStream.write(buffer, 0, bufferSize);
    bytesAvailable = fileInputStream.available();
    bufferSize = Math.min(bytesAvailable, maxBufferSize);
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    }

    outputStream.writeBytes(lineEnd);
    outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

    // Responses from the server (code and message)
    int serverResponseCode = connection.getResponseCode();
    serverResponseMessage = connection.getResponseMessage();

    fileInputStream.close();
    outputStream.flush();
    outputStream.close();
    }
    catch (Exception ex)
    {
    //Exception handling
    }
    return serverResponseMessage;
}
这是服务器端:

@POST
@Consumes({ MediaType.MULTIPART_FORM_DATA })
@Produces({ MediaType.APPLICATION_JSON })
public Response uploadStorageFile(@Context UriInfo ui, @Context HttpHeaders hh, @FormDataParam("file") InputStream uploadedInputStream,
        @FormDataParam("filename") FormDataContentDisposition fileDetail){
    String uploadedFileLocation = fileDetail.getFileName();

    // save it
    writeToFile(uploadedInputStream, uploadedFileLocation);

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

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

}
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();
        }

    }
我面临的问题是fileDetail为空,uploadedInputStream也是空的,我做错了什么

谢谢

您的
uploadStorageFile
方法中的两个文件相关对象实际上绑定到了相同的
FormDataParam
(即-
文件

尝试将
FormDataContentDisposition
更改为与
InputStream
相同的参数名


编辑:对不起,我完全错过了其他东西。您发送的表单参数的名称实际上是“uploadedFile”,而不是
文件
文件名
。将两个
FormDataParam
都更改为绑定到名为
uploadedFile
的参数,并且它们不应再为空。

谢谢,我完全错过了它。