gpt4 book ai didi

android - 如何在android中使用Volley执行文件上传?

转载 作者:行者123 更新时间:2023-11-29 01:32:14 25 4
gpt4 key购买 nike

我想将文件(图像、文档等)从我的 android 应用程序上传到我的服务器。我在我的应用程序中使用 Volley 库进行网络调用。

我正在使用以下代码上传文件,但它没有执行任何操作。(最后显示 volley 超时错误)

public class MultipartRequest extends Request<String> {

private MultipartEntity entity = new MultipartEntity();

private static final String FILE_PART_NAME = "file";


private final Response.Listener<String> mListener;
private final File mFilePart;
private String mStringPart,accessToken;

public MultipartRequest(String url, Response.ErrorListener errorListener, Response.Listener<String> listener, File file,String accessToken)
{
super(Method.POST, url, errorListener);

mListener = listener;
mFilePart = file;
this.accessToken = accessToken;
buildMultipartEntity();
}

private void buildMultipartEntity()
{
entity.addPart(FILE_PART_NAME, new FileBody(mFilePart));
try
{
entity.addPart("Content-Disposition", new StringBody("form-data"));
entity.addPart("dir_path", new StringBody("IzEzOjE3"));
}
catch (UnsupportedEncodingException e)
{
VolleyLog.e("UnsupportedEncodingException");
}
}

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = super.getHeaders();

if (headers == null
|| headers.equals(Collections.emptyMap())) {
headers = new HashMap<String, String>();
}

headers.put("Content-Type", "multipart/form-data");
headers.put("_pkta",accessToken);


return headers;
}
@Override
public String getBodyContentType()
{
return entity.getContentType().getValue();
}

@Override
public byte[] getBody() throws AuthFailureError
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try
{
entity.writeTo(bos);
}
catch (IOException e)
{
VolleyLog.e("IOException writing to ByteArrayOutputStream");
}
return bos.toByteArray();
}

@Override
protected Response<String> parseNetworkResponse(NetworkResponse response)
{
return Response.success("Uploaded", getCacheEntry());
}

@Override
protected void deliverResponse(String response)
{
mListener.onResponse(response);
}
}

请帮助我了解如何在 android 中实现文件上传(通过 volley 或任何其他方式)

最佳答案

尝试

public MultiPartRequest(String url, String filePath, Response.Listener<String> listener, Response.ErrorListener errorListener)
{
super(Method.POST, url, errorListener);
entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
file = new File(filePath);
mListener = listener;
buildMultipartEntity();
}

此外,在我的例子中,我没有覆盖 getHeaders,只是使用 addPart 传递了其他值,例如:

    entity.addPart("file", new FileBody(file, "image/jpeg")); // for image
entity.addPart("id", new StringBody(userid));

希望这对您有所帮助。

关于android - 如何在android中使用Volley执行文件上传?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30530451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com