我正在使用Retrofit将图像上传到我的服务器 上传工作正常 但是当图像大小有点大时会引发异常
java.net.SocketException: sendto failed: EPIPE (Broken pipe)
这是我的代码
public interface RestClient {
@Multipart
@POST("/upload2.php")
Response uploadUserIds(@Part("photo") TypedFile photo);
}
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(UploadFiles.SERVER_URL)
.setLogLevel(RestAdapter.LogLevel.BASIC)
.setLog(new RestAdapter.Log() {
@Override
public void log(String msg) {
Log.i(TAG, msg);
}
})
.build();
RestClient service = restAdapter.create(RestClient.class);
//我的电话
Response tr = service.uploadUserIds(new TypedFile(typeFile, f));
答案 0 :(得分:0)
这不一定是客户端的问题。我坚信文件大小超过服务器允许的最大上传大小。
答案 1 :(得分:0)
我也遇到过这个问题。我在模拟器上的Android客户端中使用Retrofit,并尝试将(相当小的)测试视频文件上传到我的Windows PC上的Eclipse中运行的服务器代码。我使用以下方法设置Retrofit进行完整记录:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://10.0.2.2:8080")
.setLogLevel(LogLevel.FULL)
.build();
在尝试上传某些文件时,这始终导致上述错误。
但是,当我使用setLogLevel(LogLevel.BASIC)
将日志级别设置为基本级别时,所有这些文件都开始上传了。
所以我怀疑这可能是某种内部的Retrofit错误,可能与缓冲区溢出有关。我不认为这是服务器问题。
答案 2 :(得分:0)
这可能是服务器端的问题。脚本可能会卡在代码中的某个位置,因此不会发布响应,同时服务器会关闭套接字。可能有两种解决方案:
第二个不可取:
希望这有帮助