文件从Android改装到ASP.net

本文关键字:ASP net Android 文件 | 更新日期: 2023-09-27 18:26:10

我目前正在尝试将Android日志(.zip)上传到ASP.net服务器。目前我有目前的改装部分:

    @Headers("Accept: Application/JSON")
    @Multipart
    @POST("/api/Device/GetLog")
    Call<Result> GetLog(@Part("zippedLog")RequestBody file, 
@Part("imei") String imei, 
@Part("dateLogStart") String dateLogStart, 
@Part("dateLogEnd") String dateLogEnd);

该调用由Logger类完成。

         File file = new File(path);
        RequestBody requestBody =
                RequestBody.create(MediaType.parse("multipart/form-data"), file);
        Call<Result> call = ApiServiceImpl.getInstance().GetLog(requestBody,SystemProp.getInstance().getImei(), start.toString().replace(" ", "-"), 
end.toString().replace(" ", "-"));
        call.enqueue(new Callback<Result>() {
            @Override
            public void onResponse(retrofit.Response<Result> response, Retrofit retrofit) {
                Result result = response.body();
            }
            @Override
            public void onFailure(Throwable t) {
                Log.e("Upload", t.getMessage());
            }
        });

然而,我不知道我应该如何编写服务器部分来等待这个文件。我试过的是

[HttpPost]
[AllowAnonymous]
public DtoResultBase GetLog(byte[] zippedLog, string imei, string dateLogStart, string dateLogEnd)
{
    return Resolve(() =>
    {
        //Call Method that save the file
        return new DtoResultBase();
    });
}

我做错了什么?

文件从Android改装到ASP.net

我解决这个问题的方法是在服务器端创建一个对象:

public class DtoLog
    {
        public string Imei { get; set; }
        public DateTime DateStart { get; set; }
        public DateTime DateEnd { get; set; }
        public byte[] LogStringBaseData { get; set; }
        public byte[] LogData { get; set; }
    }

然后使用这个对象作为控制器中的参数

[HttpPost]
        [AllowAnonymous]
        public DtoResultBase GetLog(DtoLog zippedLog)
        {
            return Resolve(() =>
            {
                // just to check data
                string imei = zippedLog.Imei;
                DateTime start = zippedLog.DateStart;
                DateTime end = zippedLog.DateEnd;
                byte[] data = zippedLog.LogData; 
                          // System.IO.File.ReadAllBytes(pathToSearch);
                return new DtoResultBase();
            });
        }

在改造的客户端,我还创建了一个obj日志:

public class LogZipped {
    @SerializedName("imei")
    private String imei;
    @SerializedName("dateStart")
    private String dataStart;
    @SerializedName("dateEnd")
    private String dataEnd;
    @SerializedName("logData")
    private String logData;
    public LogZipped(String imei, String dataStart, String dataEnd, String logData) {
        this.imei = imei;
        this.dataStart = dataStart;
        this.dataEnd = dataEnd;
        this.logData = logData;
    }
    public void setImei(String imei) {
        this.imei = imei;
    }
    public void setDataStart(String dataStart) {
        this.dataStart = dataStart;
    }
    public void setDataEnd(String dataEnd) {
        this.dataEnd = dataEnd;
    }
    public void setLogData(String logData) {
        this.logData = logData;
    }
}

并在改装公司的呼叫中使用此对象

String data = Base64.encodeToString(bytes, Base64.DEFAULT);
        LogZipped logZipped = new LogZipped (data,
                SystemProp.getInstance().getImei(),
                start.toString().replace(" ", "-"),
                end.toString().replace(" ", "-"));
        Call<Result> call = ApiServiceImpl.getInstance().GetLog(logZipped );