改造Android上传视频

时间:2014-05-06 17:12:23

标签: php android retrofit

我正在使用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));

3 个答案:

答案 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)

这可能是服务器端的问题。脚本可能会卡在代码中的某个位置,因此不会发布响应,同时服务器会关闭套接字。可能有两种解决方案:

  1. 解决服务器端脚本中的问题
  2. 第二个不可取:

    1. 在客户端将超时值增加到大数!!
    2. 希望这有帮助