我通过AJAX将图像作为base64字符串上传到ASP.NET WebService。由于AJAX / JSON,最大文件大小非常有限(在AJAX请求变得太长之前我的测试大约3MB)。
那么有没有办法将给定图像调整为FIXED文件大小(如3MB)而不是固定分辨率?
我现在已经知道了 Below is the code
public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.FragmentDrawerListener, shareDataInterface {
private Toolbar toolbar;
NavigationDrawerFragment navigationDrawerFragment;
HelperClass helperclass = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("tagIt");
toolbar.setSubtitle("make search easy..");
toolbar.setTitleTextColor(getResources().getColor(R.color.colorAccent));
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
utils= new Utils();
prefs = MyPrefs.getInstance(this);
if(prefs.getBool(MyGlobals.PASSWORD_PROTECT) == true) {
if(loggedin == 0) {
loggedin = 1;
utils.showDialog(MainActivity.this, MyGlobals.DIALOG_PIN_INPUT);
}
}
// populate navigation drawer
navigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
navigationDrawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);
navigationDrawerFragment.setDrawerListener(this);
// establish data base connection and first read tags list for NAV drawer
db = DatabaseHelper.getInstance(getApplicationContext());
navTitles =navigationDrawerFragment.titles;
// create tag handler
helperclass = HelperClass.getInstalce(getApplicationContext());
用于调整大小的功能,但设置分辨率和/或质量不仅仅是为了减少它。
我已经有了一个想法,就是让一个循环在几个周期内调整图像大小,并通过检查base64长度检查大致的文件大小,但这似乎既不高效又不够精确。
我知道我可以填写请求,但我也必须更改WebService,我只想作为最后的手段。
答案 0 :(得分:1)
JSON文件的大小没有限制。只要您有足够的资源来处理它,您就可以根据需要上传大文件。 4MB限制是ASP.NET端默认限制。
您可以在maxRequestLength
- system.web
配置密钥中添加httpRuntime
属性,它会接受任意大小的文件:
<configuration>
<system.web>
<httpRuntime maxRequestLength = "1048576" />
</system.web>
</configuration>
对于IIS 7+,您还需要添加:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
如果您仍想调整图像大小,可以在服务器端或客户端执行此操作
Resize an Image C#
HTML5 Pre-resize images before uploading
此外,还有一些插件可以执行此操作:Image resizing client-side with javascript before upload to the server
服务器端方式更可靠且与浏览器无关,而客户端方法将减少到服务器的传入流量。
答案 1 :(得分:-1)
如果您有输入文件元素......
<input type="file" id="myFile" />
你可以使用
var sizeInBytes = document.getElementById('myFile').files[0].size
获取文件大小