文件从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();
});
}
我做错了什么?
我解决这个问题的方法是在服务器端创建一个对象:
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 );