当前位置: 首页 > 知识库问答 >
问题:

HTTP POST 400。不好的要求。Google云存储XML API调用上传文件

呼延渝
2023-03-14

我收到这个错误代码。

e/camera_classes.callHttpPostTosendFiles:异常消息e java.io.ioException:服务器返回非OK状态:400消息:Bad Request error stream:com.android.okhttp.internal.http.httpTransport$FixedLengThinputStream@42353798at camera_classes.postMultipartEntity.finish(postMultipartEntity.java:161)at camera_classes.callHttpPostTosEntity.java:193)at posttoSendfiles.java:105)在Android.os.asynctask$2.调用(asynctask.java:288),java.util.concurrent.futuretask.run(Futuretask.java:237)在Android.os.asynctask$serialexecutor$1.run(futuretask.java:231)在java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1112)在

错误发生在

public List<String> finish() throws IOException {
        List<String> response = new ArrayList<String>();

        writer.append(LINE_FEED).flush();
        writer.append("--" + boundary + "--").append(LINE_FEED);
        writer.close();

        // checks server's status code first
        int status = httpConn.getResponseCode();
        String server_message = httpConn.getResponseMessage();
        if (status == HttpURLConnection.HTTP_OK) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    httpConn.getInputStream()));
            String line = null;
            while ((line = reader.readLine()) != null) {
                response.add(line);
            }
            reader.close();
            httpConn.disconnect();
        } else {
            throw new IOException("Server returned non-OK status: " + status + " message: " + server_message + " error stream : " + httpConn.getErrorStream());
        }

1)我有兴趣获得关于这里列出的错误代码(400 Bad Request)的更多信息,这样我就可以理解是什么导致了“400 Bad Request”错误。有人能帮忙吗?我尝试了所有可用的公共方法--httpconn.getResponseMessage()httpconn.getResponseCode()httpconn.getErrorStream()

2)com.android.okhttp.internal.http.httptransport$FixedLengThinputStream@42353798是什么意思?这是httpconn.geterrorStream()的输出。

共有1个答案

向嘉誉
2023-03-14

我正在使用Google Cloud XML Api的上传方法,如下所示。关于您的第二个问题,可能与使用HttpUrlConnection中的setFixedLengthStreamingMode方法有关,就像我在函数中使用的那样,您必须将上传文件的长度:

URL url = new URL("www.urltoupload.com");

HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();

httpCon.setDoOutput(true);
httpCon.setRequestMethod("PUT");
httpCon.setRequestProperty("Content-Type", Utils.getMimeType(path));
httpCon.setRequestProperty("Connection", "Keep-Alive");
httpCon.setFixedLengthStreamingMode((int) dest.length());

final DataOutputStream out = new DataOutputStream(httpCon.getOutputStream());

float bytesTotal = fileBeingUploaded.length();

int bytesRead;
byte buf[] = new byte[8192];
BufferedInputStream bufInput = new BufferedInputStream(new FileInputStream(dest));

while ((bytesRead = bufInput.read(buf)) != -1) {
    out.write(buf, 0, bytesRead);
    out.flush();
}

out.close();
 类似资料:
  • 我在本地开发服务器上运行代码,但使用在项目上配置的GCS默认桶名。 Python 2.7版

  • 我正试图用BlobStore上传到GCS。我在生成上传url时设置了GCS bucket名称,并且文件成功上传。 在上传处理程序中,返回正确的文件名。但是文件实际上以不同的文件名保存在GCS bucket中。每次,文件名都是随机散列,如下所示: 它会是这样工作的吗?这是异常吗? 我根据返回的数据将文件名存储到datastore,这是文件名的正确值。但是我无法使用访问该文件,因为该文件以随机散列作为

  • 我有一个firebase帐户,我想以编程方式上传一些照片到firebase存储。为此,我使用了google cloud java storage API。我配置权限和其他权限。我可以成功地创建桶,斑点。然而,当我试图上传一张图片时,要么它的大小为0,要么它无法下载(不生成URL)。下面是我使用的代码; 任何建议都很感激。问候。

  • 谷歌云存储中的文件更改需要多长时间才能传播? 我遇到了一个非常令人沮丧的问题,我改变了一个文件的内容,并通过gsutil重新上传,但是这个改变几个小时后才显示出来。有没有办法强制一个改变的文件立即传播所有内容? 如果我查看谷歌云存储控制台中的文件,它会看到新文件,但如果我点击公共网址,它是旧版本,在某些情况下,是2个版本前的版本。 有没有我没有设置的标题? 编辑: 我尝试了,但它没有帮助,但也许旧

  • Firebase Admin SDK文档清楚地说明,服务帐户对存储帐户具有完全的范围控制,但由于传输令牌源为nil,因此正确引导凭据似乎有些错误。