我测试了.NET web API,postman正在工作,但我尝试在Android中使用okhttp3和retrofit2。我都收到了内部服务器错误500。怎么了?我该怎么办?
分级
实现“com.squareup.okhttp3:okhttp:3.4.1”
实现“com.squareup.okhttp3:logging-interceptor:3.4.1”
实现“com.squareup.reverfit2:reverfit:2.3.0”
实现“com.squareup.reverfit2:converter-gson:2.1.0”
Android改版(点击按钮时调用uploadFile方法)
public interface UploadAPIs {
@Multipart
@POST("FileUpload")
Call<ResponseBody> uploadFile(
@Part ("description") RequestBody description,
@Part MultipartBody.Part file);
}
public Boolean uploadFile(File file) {
RequestBody descriptionPart = RequestBody.create(MultipartBody.FORM, file.getName());
RequestBody filePart = RequestBody.create(MediaType.parse("image/gif"), file);
MultipartBody.Part fileMulti = MultipartBody.Part.createFormData("file"
, file.getName(), filePart);
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("http://xxxxxxxxxx/api/FileExplorerApi/")
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
UploadAPIs uploadAPIs = retrofit.create(UploadAPIs.class);
Call<ResponseBody> call = uploadAPIs.uploadFile(descriptionPart, fileMulti);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (!response.isSuccessful()) {
// Handle the error
String error = response.errorBody().toString();
return false;
}else{
String responseStr = response.body().toString();
return true;
}
}
@Override
public void onFailure(Call call, Throwable t) {
}
});
}
Android okhttp3(点击按钮时调用uploadFile方法)
public Boolean uploadFile(File file) {
OkHttpClient client = new OkHttpClient();
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("multipart/form-data"), file))
.build();
Request request = new Request.Builder()
.url("http://xxxxxxxxxx/api/FileExplorerApi/FileUpload")
.post(body)
.addHeader("content-type", "multipart/form-data")
.addHeader("Content-Type", "multipart/form-data,image/gif")
.addHeader("cache-control", "no-cache")
.addHeader("Postman-Token", "58564c84-b8a7-4455-b346-4606ce696675")
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(final Call call, final IOException e) {
// Handle the error
}
@Override
public void onResponse(final Call call, final Response response) throws IOException {
if (!response.isSuccessful()) {
// Handle the error
return false;
}else{
String responseStr = response.body().string();
return true;
}
// Upload successful
}
});
}
.NET Web Api(Web Apihtml" target="_blank">控制器)
[HttpPost]
[Route("~/FileExplorerApi/FileUpload")]
public HttpResponseMessage Upload()
{
var request = HttpContext.Current.Request;
var file = request.Files["file"];
string filename = DateTime.Now.ToString("yyyyMMddHHmmssFFF_") + file.FileName;
file.SaveAs(@"c:\Projects\FileExplorer\Gif\" + filename);
return new HttpResponseMessage(HttpStatusCode.OK);
}
终于有了答案。我的.NET项目是MVC现有的web项目。我在项目中添加了API控制器,这就是为什么我会遇到这个问题的原因。我想邮递员的结果是好的,安卓也应该是好的。我的解决方案是创建新的仅.NET web API项目。以下答案只是为了我的改进而分享。
我更改了新的HTTP客户端loopj库,使其比以前的两个库都更容易。
RequestParams params = new RequestParams();
try {
params.put("file", file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
AsyncHttpClient client = new AsyncHttpClient();
client.post("http://xxxxxxxxxx/api/FileExplorerApi/Upload?sub=Boomerang", params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
System.out.println("statusCode "+statusCode);//statusCode 200
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
}
});
我将上传一个很大的文件,为什么我需要在.NET MVC web API项目进行配置。上载升级文件需要执行以下配置。(web.config)
<system.web>
<httpRuntime maxRequestLength="2097152"/>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824"/>
</requestFiltering>
</security>
<system.webServer>
我在Localhost中正确上传我的文件,但是当我在服务器上上传我的应用程序时,他们给我错误:上传文件后服务器错误。 这是我的控制器: 在我的本地主机中,文件保存在公用文件夹中。我想用public\u html或public\u html/image将我的文件保存在我的服务中。
我正在尝试上载一个csv文件到服务器。下面是我的HTML代码: 还有我的JS:- 我面临以下错误:- 加载资源失败:服务器响应的状态为500(HTTP/1.1 500) 可能未经处理的拒绝:{“data”:{“timestamp”:1510643953084,“status”:500,“error”:“内部服务器错误”,“exception”:“java.lang.NullPointerExcep
当我在git中切换分支并使用安装包时,我的本地AEM实例突然停止工作。 生成失败,请求执行 我的错误日志显示以下错误:
我正在尝试通过Multer将文件上载到服务器。这段代码所做的只是创建文件夹,而不是文件。我还尝试使用github上的教程,但在前端我的代码也没有成功 代码AJAX 还有MAIN.JS 我从前端获得的console.log输出:
问题内容: 我想使用 在请求之间保存一个ID ,但是执行请求时得到了结果。 我设计了一个简单的Flask应用程序原型来演示我的问题: 为什么执行请求时不能使用以下值存储cookie? 问题答案: 根据Flask会议文档: …这意味着用户可以查看你Cookie的内容,但不能修改它,除非他们知道用于签名的密钥。 为了使用会话,你必须设置一个秘密密钥。 设置密钥。并且你应该返回字符串,而不是int。
尝试将文件上载到S3 Bucket,我使用以下代码设置SDK: 错误日志 可能的错误: URL应基于以下表单:文档