【问题标题】:How to upload .mp3 file and image to http server?如何将 .mp3 文件和图像上传到 http 服务器?
【发布时间】:2011-08-12 18:00:03
【问题描述】:

我上传图片到服务器的代码是:

String userIdParameter = String.valueOf(userId);
    String fileName = "temporary_holder.jpg";
    HttpURLConnection conn = null;
    DataOutputStream dos = null;

    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary = "*****";
    int bytesRead, bytesAvailable, bufferSize;
    byte[] buffer;
    int maxBufferSize = 1 * 1024 * 1024;

    String sourceFileUri = HomeScreen.get_path();
    String upLoadServerUri = "http://10.120.10.87:8080/WebImage/UploadImage";

    File sourceFile = new File(sourceFileUri);
    if (!sourceFile.isFile()) {
        Log.e("Huzza", "Source File Does not exist");
        return;
    }
    int serverResponseCode = 0;
    try {

        // open a URL connection to the Servlet
        FileInputStream fileInputStream = new FileInputStream(sourceFile);

        // ------------------ CLIENT REQUEST
        URL url = new URL(upLoadServerUri);

        // Open a HTTP connection to the URL
        conn = (HttpURLConnection) url.openConnection();
        conn.setDoInput(true); // Allow Inputs
        conn.setDoOutput(true); // Allow Outputs
        conn.setUseCaches(false); // Don't use a Cached Copy

        // Use a post method.
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Connection", "Keep-Alive");

        conn.setRequestProperty("ENCTYPE", "multipart/form-data");
        conn.setRequestProperty("Content-Type",
            "multipart/form-data;boundary=" + boundary);
        conn.setRequestProperty("file_name", fileName);
        conn.setRequestProperty("file_name_audio", fileName);
        conn.setRequestProperty("X-myapp-param1", userIdParameter);

        // conn.setFixedLengthStreamingMode(1024);
        // conn.setChunkedStreamingMode(1);

        dos = new DataOutputStream(conn.getOutputStream());

        dos.writeBytes(twoHyphens + boundary + lineEnd);

        dos.writeBytes("Content-Disposition: form-data; name=\"file_name\";filename=\""
            + fileName + "\"" + lineEnd);

        dos.writeBytes(lineEnd);
        
        
            // create a buffer of maximum size
        bytesAvailable = fileInputStream.available();

        int streamSize = (int) sourceFile.length();
        bufferSize = streamSize / 10;

        System.out.println("streamSize" + streamSize);

        buffer = new byte[streamSize];

        // read file and write it into form...
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        int count = 0;
        while (bytesRead > 0) {
        progress = (int) (count);
        displayNotification();
        Thread.sleep(500);
        
        dos.write(buffer, 0, bufferSize);
        bytesAvailable = fileInputStream.available();
        // bufferSize = Math.min(bytesAvailable, maxBufferSize);
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        count += 10;

        }

        // send multipart form data necesssary after file data...
        dos.writeBytes(lineEnd);
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

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

        System.out.println("Upload file to serverHTTP Response is : "
            + serverResponseMessage + ": " + serverResponseCode);
        // close streams
        System.out.println("Upload file to server" + fileName
            + " File is written");
        fileInputStream.close();
        dos.flush();
        dos.close();
    } catch (MalformedURLException ex) {
        ex.printStackTrace();
        Log.e("Upload file to server", "error: " + ex.getMessage(), ex);
    } catch (Exception e) {
        e.printStackTrace();
    }
    // this block will give the response of upload link
    try {
        BufferedReader rd = new BufferedReader(new InputStreamReader(
            conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
        System.out.println("RESULT Message: " + line);
        }
        rd.close();
    } catch (IOException ioex) {
        Log.e("Huzza", "error: " + ioex.getMessage(), ioex);
    }
    return; // like 200 (Ok)

    

将图像上传到服务器工作正常。我需要将 mp3 文件和图像上传到服务器。

【问题讨论】:

  • 检查this
  • 这种方式是上传mp3文件..我需要同时上传mp3和图片..上传2个文件..我想知道如何准备上传2个文件的表格
  • 嗨 jennifer,我有一个大问题。你是如何传递要上传的图片参数的。

标签: java android file-upload multipartform-data


【解决方案1】:

那么,您想在一个 HTTP 请求中发送多个文件吗?我自己从来没有这样做过,但是根据RFC,只需在您发送音频的消息中添加另一个正文,它应该看起来像这样:

    dos = new DataOutputStream(conn.getOutputStream());
    dos.writeBytes(twoHyphens + boundary + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"file_name\";filename=\""
        + fileName + "\"" + lineEnd);
    dos.writeBytes(lineEnd);
    // Code for sending the image....
    dos.writeBytes(lineEnd);


    dos.writeBytes(twoHyphens + boundary + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"file_name_audio\";filename=\""
        + fileNameAudio + "\"" + lineEnd);
    dos.writeBytes(lineEnd);
    // Code for sending the MP3
    dos.writeBytes(lineEnd);
    dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

确保两个部分的名称不同(取决于服务器软件)。

【讨论】:

  • @stephan :如果我想通过这个多部分传递字符串值,例如带有用户名的视频和音频文件,其 ID 带有名称“user_name”和“user_id”。而这个 user_id 和 user_name 是字符串。
猜你喜欢
  • 2011-06-25
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多