0

我尝试将视频文件从 android 发送到 wcf 服务。视频文件成功上传,两端大小相同,但问题是无法打开。对于其他文件,它工作正常,但不仅适用于视频文件。

下面是我的安卓代码:

      package com.example.filedemo;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.Environment;
import android.util.Log;

public class HttpUpload {

    public static String res;
    public static String response;
    public void myUploadedfile() {
        HttpClient httpClient = new DefaultHttpClient();

        HttpPost postRequest = new HttpPost(
                "http://10.160.0.18:85/Service.svc/UploadFile?fileName=vd.mp4");
        /* ResponseHandler<String> responseHandler = new BasicResponseHandler(); */

        // Indicate that this information comes in parts (text and file)
        MultipartEntity reqEntity = new MultipartEntity(
                HttpMultipartMode.BROWSER_COMPATIBLE);

        try {

            // Create a JSON object to be used in the StringBody
            JSONObject jsonObj = new JSONObject();

            // Add some values
            jsonObj.put("filename", "vd.mp4");

            // Add the JSON "part"
            reqEntity.addPart("entity", new StringBody(jsonObj.toString()));
        } catch (JSONException e) {
            Log.v("App", e.getMessage());
        } catch (UnsupportedEncodingException e) {
            Log.v("App", e.getMessage());
        }

        FileBody fileBody = new FileBody(new File(
                Environment.getExternalStorageDirectory(), "vd.mp4"));// ,"application/octet-stream");
        reqEntity.addPart("file", fileBody);

        try {
            postRequest.setEntity(reqEntity);

            // Execute the request "POST"
            HttpResponse httpResp = httpClient.execute(postRequest);

            /*HttpResponse response = null;*/
            // Check the status code, in this case "created"

            Log.v("App", "Created");
            /*if (((HttpResponse) response).getStatusLine().getStatusCode() == HttpStatus.SC_CREATED)
            {

            }*/
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}

wcf 代码

    FileStream fileToupload = new FileStream("D:\\vd.mp4", FileMode.Create, FileAccess.Write);

byte[] bytearray = new byte[10000];
int bytesRead, totalBytesRead = 0;
do
{
bytesRead = mystream.Read(bytearray, 0, bytearray.Length);
totalBytesRead += bytesRead;
} while (bytesRead > 0);

fileToupload.Write(bytearray, 0, bytearray.Length);
fileToupload.Close();
fileToupload.Dispose();
return "success";
4

1 回答 1

0

似乎问题出在 MIME 类型上。 Android Multipart HTTP Post 不发送文件的 MIME 类型

尝试在此处接受的答案中使用为 uploadVideo() 方法提供的代码。 Android 使用 HTTP 多部分表单数据将视频上传到远程服务器

于 2013-02-25T18:08:03.903 回答