首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android开发镜像上传损坏

Android开发镜像上传损坏
EN

Stack Overflow用户
提问于 2010-07-01 07:42:56
回答 3查看 1.2K关注 0票数 1

我正在开发一个Android应用程序,并尝试从客户端将图像上传到我们的服务器。当我在服务器上查看图像时,它有时会损坏(底部有灰条)。我不确定为什么会发生这种事。有没有人能帮我解决这个问题,或者告诉我如何解决这个问题?下面是上传图片的代码:

代码语言:javascript
复制
try {
    url = new URL(SERVER_URL);
    connection = (HttpURLConnection)url.openConnection();
    connection.setDoInput(true);
    connection.setDoOutput(true);
    connection.setUseCaches(false);
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Connection", "Keep-Alive");
    connection.setRequestProperty("Content-Type", "image/jpeg");
    connection.setChunkedStreamingMode(STREAM_CHUNK_SIZE_KB * 1024);
    connection.connect();
    outputStream = new DataOutputStream(connection.getOutputStream());

    // Write file header (userId; Id; contentId; MediaType; size)
    outputStream.writeLong(mUserId);
    outputStream.writeLong(mId);
    outputStream.writeLong(file.getId());
    outputStream.writeUTF(MediaType.getMediaType(file.getMediaType()));
    outputStream.writeInt(file.getSize());

    // Write file data to stream
    int maxBufferSize = (8 * 1024);
    FileInputStream fileInputStream = new FileInputStream(file.getImageFile());
    int bytesAvailable = fileInputStream.available();
    int bufferSize = Math.min(bytesAvailable, maxBufferSize);
    byte[] buffer = new byte[bufferSize];
    int bytesRead = fileInputStream.read(buffer, 0, bufferSize);

    while (bytesRead > 0) {
        outputStream.write(buffer, 0, bufferSize);
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    }

    outputStream.writeBytes("\r\n");
    outputStream.flush();

    // Check response
    int responseCode = connection.getResponseCode();
    if (responseCode == HttpURLConnection.HTTP_OK) {
        uploadStatus = true;
        InputStream responseStream = connection.getInputStream();
        BufferedReader responseReader = new BufferedReader(new 
            InputStreamReader(responseStream));
        char[] response = new char[4];
        responseReader.read(response, 0, 4);
        responseReader.close();
        int responseValue = 0;
        for (int b = 0; b < 4; b++) {
            responseValue |= response[b] & 0xFF;
            if (b < 3) {
                responseValue <<= 8;
            }
        }

        switch (responseValue) {
            case SAVED_SUCCESSFULLY:
                Log.d("FileUploader::upload -> Server response: Upload successful");
            break;
            case ERROR_SAVING_FILE:
                Log.d("FileUploader::upload -> Server response: Upload failed");
            break;
            case FILE_MORE_THAN_ALLOWED_SIZE:
                Log.d("FileUploader::upload -> Server response: Upload failed, exceeded 
                    allowed file size");
            break;
        }
    } 

    else {
        Log.d("FileUploader::upload -> responseCode = " + responseCode);
        checkErrorStream(connection.getErrorStream());
    }
} 

catch(Exception e) {
    Log.e(Log.getStackTraceString(e));
} 

finally {
    try {
        if (outputStream != null) {
            outputStream.close();
        }
    } 

    catch(Exception e) {
        Log.e(Log.getStackTraceString(e));
    }

    if (connection != null) {
        connection.disconnect();
    }
}
EN

回答 3

Stack Overflow用户

发布于 2010-07-01 08:06:31

请尝试通过USB而不是网络从设备中获取图像。这个图像是可以的,还是它也会被破坏?

票数 0
EN

Stack Overflow用户

发布于 2010-07-01 08:17:47

如果不构建一个测试应用程序并运行您的代码,我就不能轻易地告诉您为什么图像会损坏,但我可以给您一个提示:

将原始图像保存到文件。获取通过网络传输的图像。在十六进制编辑器中打开这两个文件,然后看看有什么不同。(它可能接近文件的末尾。)

这应该会告诉你实际的损坏是由什么组成的,这反过来又会告诉你在你的代码中寻找什么。

(例如,您可能会截断您的文件,或者添加不应该出现的换行符,或者任何数量的细微错误。)

票数 0
EN

Stack Overflow用户

发布于 2010-07-01 13:59:26

您的代码中可能存在错误:

代码语言:javascript
复制
outputStream.write(buffer, 0, bufferSize);

应该是

代码语言:javascript
复制
outputStream.write(buffer, 0, bytesRead);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3154224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档